REGEX для поиска вложееных конструкций

anufriy

Новичок
REGEX для поиска вложееных конструкций

Поискал по форуму - не нашол. Поэтому задаю вопрос напрямую. Вставляем условия в шаблоны. Необходимо парсить на наличие if-ов. Сутки уже не могу родить регвыр на простую вродебы задачу - поиск самой внутренней конструкции в строке вроде:

PHP:
 $schema = "
text
AA
  .......
  AA
    .......
  BB
  .......
BB
text
";
(Ну для простоты AA - открывающий if, BB - закрывающий)

Вот такой вот код:

PHP:
preg_match_all("/AA((?!(?:.*AA.*)).*)BB/U", $schema, $if, PREG_SET_ORDER);
впринципе вполне справляется, но пока вся эта радость записана в строку. При попытке приучить работать с переносами строк торжественно отрубается. И почемуто даёт только 1 результат, даже если в коде есть ещё одна правильная конструкция.
 

das6745

Новичок
посмотри модификаторы, там можно задать игнорировать \n и \r
 

WP

^_^
Не игнорировать. Модификатор s - DOTALL.
Но выражение какое-то странное, тебе ведь парсить структуру надо? Неограниченной вложенности?
 

anufriy

Новичок
да, именно так.
Но я не понимаю, как можно найти структуру не содержащую слово. (Именно слово а не символ)
 

WP

^_^
PHP:
$schema = "
text
AA
  .......
  AA
    .......
  BB
  .......
BB
text
";
function callback($m) {var_dump($m); parse($m[1]);}
function parse($s) {preg_replace_callback('~^\s*AA((?:(?R)|.)*?)^\s*BB~msi','callback',$s);}
parse($schema);
/*
array(2) {
  [0]=>
  string(53) "AA
  .......
  AA
    .......
  BB
  .......
BB"
  [1]=>
  string(49) "
  .......
  AA
    .......
  BB
  .......
"
}
array(2) {
  [0]=>
  string(23) "  AA
    .......
  BB"
  [1]=>
  string(15) "
    .......
"
}
*/
 
Сверху