2012-03-09 72 views
0

我通常编写简单的正则表达式很不错,但是这一次我无法弄清楚这一点。正则表达式php标签

我需要一个正则表达式捕获所有可能的选项:

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

[^$]代表“不以$字符”

换句话说,我想抓住所有的时间,一个打印没有使用变量。

我想出了这样的事情:

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

它不工作,也弄不清什么是写的方式..

+0

'{^ $]'和'[^ $]'是什么意思? – Joseph 2012-03-10 00:09:56

+0

我的意思是他们都是'[^ $]' – Fabrizio 2012-03-12 20:39:46

回答

2

这是因为在短期形式的正则表达式是线路噪声。没有人应该尝试对它们进行编程,特别是没有人应该尝试阅读它们。

尝试使用扩展标志/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/

你可以看到如何在nettuts+ article on Advanced Regular Expressions Tips and Techniques做到这一点在PHP更详细的例子。

+0

这是“caret”,而不是“胡萝卜”。这是一种耻辱,因为另一种方式听起来非常可爱。 – octern 2012-03-10 00:43:51

+0

更正。我知道,当我写它时,我是拼写的坚持者。猜猜我也喜欢它的外观。 – 2012-03-10 00:50:51

1
<\?(((php)?\s*(echo|print))|=)\s*((\[|\{)\^\$]) 

其中:

  • <\? - 始于<?

然后接着为无论是:

  • (php)? - 或者具有PHP的前奏或不

  • (echo|print) - 无论是回波或打印

或:

  • = - 手短呼应

再接着你[^$]{^$]

0

不完全确定你想要什么。但/<\?(php|=)?\s*?(echo|print)?\s*?(\{|\[)\^\$\]/i正则表达式匹配选项中的所有内容(我认为,我使用基于Java的正则表达式测试程序创建了它,然后将其修改为在PHP测试程序中工作,但结果似乎很有用,但不确定您想要什么,它确实返回true)。