php preg соответствует встроенным совпадениям

#php #regex #preg-match

#php #регулярное выражение #preg-match

Вопрос:

Как я могу сопоставить только точный встроенный код и сопоставить два if дважды, а не как одно совпадение.

http://regexr.com ?2uvul

Я хочу получить результат с:

Массив ([0] => asd [1] => asd)

нет

Массив ([0] => asdasd)

Комментарии:

1. Будущему пользователю этого сайта было бы полезно, если бы вы вставили пример кода и выражения, которые вы пробовали, в вопрос выше. Используйте символ обратного тика (на ~ клавише), чтобы заключить текст или код в кавычки или сделать отступ кода на четыре или более пробела, чтобы выделить его из остального текста

Ответ №1:

http://regexr.com ?2uvuu — используйте выражение:

 <!--s IFs ([^s]*)s-->([^<]*)<!--sENDIFs-->
  

Редактировать:

Учитывая, что то, что вы хотите сопоставить внутри «тега» оператора if, может содержать пробелы, немного более медленное выражение, которое должно обрабатывать что-либо внутри «оператора if», должно быть следующим (в RegExr):

 /<!--s IFs (.*?)s-->([^<]*)<!--sENDIFs-->/gixsm
  

Если затем вы хотите иметь возможность захватывать другие теги (или символ < ) внутри результата (если оператор «true», вы захотите использовать (опять же, немного медленнее) выражение (в регулярном выражении):

 /<!--s IFs (.*?)s-->(.*?)<!--sENDIFs-->/gixsm
  

ЗАВЕРШЕНИЕ РЕДАКТИРОВАНИЯ

Комментарии:

1. Что о <!— IF test == 3 —>АСД<!— ENDIF —> ?

2. Извините, но ваш вопрос был очень неполным, и я не знаю, о чем вы спрашиваете, поэтому, полагаю, я дал неполный ответ. Я понятия не имею, что может появиться в вашем if «statement», потому что я не знаю синтаксиса. Я попробую еще раз!

3. Привет, извините, я забыл упомянуть об этом синтаксисе, он довольно вложенный. Спасибо за идеальный код! 🙂

4. Привет, еще раз извините за вопрос, но как насчет этого: regexr.com ? 2v00e ? Тег внутри тега.

5. Если вы пытаетесь вложить логику ‘if’, вам либо придется найти или определить какой-то способ, чтобы ifs и endif выглядели иначе, чем друг у друга, либо вам придется использовать какой-то тип реального синтаксического анализатора. Полное решение выходит далеко за рамки этого комментария, но дифференциация может быть достигнута путем присвоения тегам beginning и ending if идентификатора, подобного <!-- IF(0) x == 5 --> <!-- IF(1) blah is true --> asdf <!-- ENDIF(1) --> ghjkl <!-- ENDIF(0) --> этому, вы можете сопоставить начальный и конечный теги, чтобы проанализировать их отдельно. Кроме того, пожалуйста, посмотрите мой комментарий к вашему вопросу.