正则表达式php标签

时间:2012-03-09 23:56:48

标签: php regex preg-match

我通常很擅长编写简单的正则表达式,但这次我无法解决这个问题。

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

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

[^$]代表“非$字符”

换句话说,我想要记住不使用变量进行打印的所有时间。

我想出了类似的东西:

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

它不起作用,无法弄清楚写它的方式是什么..

3 个答案:

答案 0 :(得分: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中执行此操作。

答案 1 :(得分:1)

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

其中:

  • <\? - 以<?
  • 开头

然后是:

  • (php)? - 是否有php介绍

  • (echo|print) - 回显或打印

或:

  • = - 一个简短的回声

然后是您的[^$]{^$]

答案 2 :(得分:0)

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