Регулярное выражение.

riff

Новичок
Регулярное выражение.

PHP:
<?php
$out = array();
preg_match_all('/\(((.*?)="(.*?)"[,\s]*)\)/',
	'text (one="1", two="2", three="3") text', $out, PREG_SET_ORDER);
?>
Не получается добиться того чтобы в результирующий массив попали все три перечисленных элемента.
 

riff

Новичок
Вот то что в скобачках (one="1", two="2", ...); хотелось бы что бы результат был:
Код:
array(
  array(
    0=>'one="1"',
    1=>'one',
    2=>'1'
  ),
  array(
    0=>'two="2"',
    1=>'two',
    2=>'2'
  ),
  ...
);
 

ksnk

прохожий
imho, в одну регулярку - не получится... Нужно сначала получить внутренность скобки, а затем ее анализировать.
 

bools

Новичок
Интересно.. код твой правильный, фишка в том, что экранированные скобки в начале \( и в конце /) почему-то не выдают соответствия патерну....
 

riff

Новичок
Если сейчас правильно помню, то в данном случае выдаёт: 1=>'one', 2=>'текст до закрывающей скобки'. Если поперебирать варианты, то можно добиться, что бы правильно выдавало хотябы первый элемент, а дальше никак.
Думал что, если попробовать в том варианте, где выдаёт правильный первый элемент, поставить затем звёздочку, то парсёр повторит его и для следующего элемента... не проканало.
Обидно что, если не указывать парсёру необходимость захвата текста в скобках, то выковырять все элементы не проблема.
 

bools

Новичок
Black Raven прежде чем что-то писать, надо это проверять, как это работает.
 

Black Raven

Новичок
bools, так лучше?

/([a-z]+)="([^"]+)"/

Ну не обратил внимания не первый ([1]) элемент каждого массива.
А ты мог только сказать что я не прав, а исправить не смог?..
 

bools

Новичок
Black Raven по "заданию" строка располагается в круглых скобках:

Код:
text (one="1", two="2", three="3") text
 
Сверху