Регулярные выражение. Пустой символ.

bmn

Новичок
Регулярные выражение. Пустой символ.

Здрасте! У меня вопрос по регулярным выражениям.
есть что-то вроде:
type="text" value="znachenije" name=imia
всё это может быть в любом порядке.
написал рег. выражение:
PHP:
/\s*(.*?)\s*=\s*[\'|"](.*?)[\'|"]/
ну у меня работает, если значение пишется просто без кавычек..

Пожалуйста, подскажите мне ошибку!
Заранее благодарен!
 

sage

Новичок
у тебя точно это работает? может быть, ты неправильно скопировал сюда выражение?
 

bmn

Новичок
что-то тут слэши не поставились(там где s*)... ну да ладно..
---
нет, всё правильно, просто там видишь у меня стоит " или '
должно стоять после равно и после значения.. а нужно что-то приписать, чтоб могло вообще ничего не стоять.
 

sage

Новичок
а нужно что-то приписать, чтоб могло вообще ничего не стоять
Код:
['|"]?
я бы посоветовал решение более универсальное:
Код:
!<\w+([^>]*)>!
а потом, скорее всего, тебе понадобится [m]explode[/m]
 

bmn

Новичок
да зачем експлод?
выражением всё очень хорошо делается, только вот одно место исправить нужно..
 

sage

Новичок
как хочешь.... про это одно место я тебе написал...
 

zerkms

TDD infected
Команда форума
PHP:
$str = 'type="text" value="znachenije" name=imia';
preg_match_all('/\s*(\w+)=("|\'|)(\w+)\\2/', $str, $matches);
var_dump($matches[1]);
var_dump($matches[3]);
 

bmn

Новичок
zerkms, спасибо тебе огромное, но остался один ньюанс.
значение - (\w+), а если в значении будет ССЫЛКА например, то не работает..
как это исправить?
 

zerkms

TDD infected
Команда форума
bmn
добавить к \w русские символы и сделать всё регулярное выражение регистронезависимым
 

zerkms

TDD infected
Команда форума
ужас...
а что будет если

Код:
name="value'value"
или
name="value value"
??

может лучше (\w+) заменить например на ([\wа-я]+) и добавить модификатор i ?
 

zerkms

TDD infected
Команда форума
куда и как не проходят?
пример строки показывай
 

bmn

Новичок
PHP:
 $str = " value='http://www.w3c.org/' name=\"site\" maxlength=255 "; 
preg_match_all('/\s*(\w+)=("|\'|)(\w+)\\2/', $str, $matches);
 

zerkms

TDD infected
Команда форума
preg_match_all('/\s*(\w+)=("|\'|)([\wа-я:\/.]*)\\2/i', $str, $matches);
 

bmn

Новичок
zerkms, спасибо! Помоему всё хорошо работает!

-~{}~ 04.06.06 14:45:

Вопрос возник ещё один
есть форма
<form action='bla.php' method='post'>
....
...
</form>
необходимо получить содержимое формы. (на экшены, методы и другие атрибуты не обращать внимания, я их потом по схеме написанной выше выдерну)
помоему должно быть что-то вроде
PHP:
<form.*>(.*)<\/form>
но опять же... нужно исключить тег </form> (где (.*))
подскажите, пожалуйста
 

bmn

Новичок
HTML-code:
<form name=form1 method=POST action="123.php">
..
...
....
</form>
...
<form name=form2 method=POST action="456.php">
...
..
.
</form>
---
необходимо выдерднуть данные:
1. name=form1 method=POST action="123.php"
2. name=form2 method=POST action="456.php"
3. всю форму1
4. всю форму2
 
Сверху