вытянуть параметр из тэга

_Dio_

Новичок
вытянуть параметр из тэга

Хочу вытянуть значение параметра (например из <input type=text name=lalala>, вытнять lalala)
Не силен в регэкспах :( и вот собрал следующее:
PHP:
<?php
$var = "<input type=text name=name2 class=menu>
<select name=zip k>
</select>
<textrea name=zip></textarea>";
preg_match_all('|<.+\sname=(\S+).*>|',$var,$res);
print_r($res[1]);
?>
результат такой:

Array
(
[0] => name2
[1] => zip
[2] => zip></textarea

)
в чем глюк, почему в последнем совпадении еще кусок html прилип?
 

SiMM

Новичок
_Dio_, потому что ты не использовал жадность квантификатора там, где это нужно, и не учёл возможность того, что после name может ничего не быть - попробуй
PHP:
preg_match_all('|<.+?\sname=)([^\s>]*).*?>|',$var,$res);
 

Кром

Новичок
Задача достаточно специфическая. Возможно даже решается совсем иначе.
Что касается регулярки, такой вариант, думаю, будет точнее
PHP:
preg_match_all('/<[^>]*name *= *["|\']? *([^ <>"\']+) *["|\']?[^<]*>/',$var,$res);
 

_Dio_

Новичок
уууу, круто :) И работает. спасибо большое, буду разбирать
эту шифровку.
 

Uragan

Guest
Вот как я рагребаю теги:
preg_match_all('/\<img(.*)\>/siU', $html, $match, PREG_PATTERN_ORDER);
foreach ($match[1] as $key=>$val)
{
$old_tag = $val;
// clear before & after '=' in attributes
$val = preg_replace("/[\n|\r|\t| ]*=[\n|\r|\t| ]*/si", "=", $val);
// clear carriage return,new line,tab in tag
$val = preg_replace("/\r|\n|\t/siU", " ", $val);
$img_tag = $val;
$attributes = explode(" ",$val);
...
дальше не буду продолжать
все атрибуты лежат в $attributes, терь бей их '=' на пары
отлично работает.
 
Сверху