теги php регулярного выражения - PullRequest
0 голосов
/ 10 марта 2012

Я обычно неплохо пишу простые регулярные выражения, но на этот раз я не могу этого понять.

Мне нужно регулярное выражение, которое улавливает все возможные варианты:

<?php echo [^$]
<?php print [^$]
<? echo [^$]
<? print [^$]
<?echo [^$]
<?print [^$]
<?= [^$]
<?=[^$]

[^$] означает «не символ $»

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

Я придумал что-то вроде этого:

preg_match('/<\?[\s*|=|php]?\s*[echo\s|print\s]?\s*[^\$]/i',$content);

это не работает, не могу понять, как было бы написать это ..

Ответы [ 3 ]

2 голосов
/ 10 марта 2012

Это связано с тем, что регулярные выражения в краткой форме являются шумом строки.Никто не должен пытаться их программировать, и особенно никто не должен пытаться их читать.

Попробуйте использовать расширенный флаг /x, чтобы вы могли использовать пробелы и добавлять комментарии, как для других, так и для других.для вашего будущего себя.

Это может быть улучшено кем-то лучше в регулярных выражениях, но это дает вам пример того, как начать:

/
<\?                 # bracket and question mark
\s*                 # 0 to any white space
(php|echo|print|=)  # php or echo or print or equal sign
\s*                 # optional white space
(echo|print)*       # optional echo or print
\s*                 # optional white space
(\{|\[)             # curly brace or square bracket
\^                  # caret
\$                  # $
]                   # square bracket
/gx

Кроме того, онлайн-инструмент может помочь вампостройте его и смотрите результаты шаг за шагом:

http://gskinner.com/RegExr/

Более подробный пример того, как это сделать, можно найти в php в статье nettuts + на Advanced Regular.Советы и приемы выражений .

1 голос
/ 10 марта 2012
<\?(((php)?\s*(echo|print))|=)\s*((\[|\{)\^\$])

где:

  • <\? - начинается с <?

затем следует либо:

  • (php)? - либо есть введение в php, либо нет

  • (echo|print) - либо эхо, либо печать

или

  • = - эхо короткой руки

затем следует [^$] или {^$]

0 голосов
/ 10 марта 2012

Не совсем уверен, что вы хотите. но это /<\?(php|=)?\s*?(echo|print)?\s*?(\{|\[)\^\$\]/i регулярное выражение сопоставляется со всем в опциях (я думаю, я создал его с помощью тестера регулярных выражений на основе Java, а затем изменил его для работы в тестере PHP, хотя результаты, похоже, полезны, но не уверены, чего вы хотите, он возвращает true).

...