我通常很擅长编写简单的正则表达式,但这次我无法解决这个问题。
我需要一个能够捕获所有可能选项的正则表达式:
<?php echo [^$]
<?php print [^$]
<? echo [^$]
<? print [^$]
<?echo [^$]
<?print [^$]
<?= [^$]
<?=[^$]
[^$]
代表“非$字符”
换句话说,我想要记住不使用变量进行打印的所有时间。
我想出了类似的东西:
preg_match('/<\?[\s*|=|php]?\s*[echo\s|print\s]?\s*[^\$]/i',$content);
它不起作用,无法弄清楚写它的方式是什么..
答案 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
此外,在线工具可以帮助您构建它并逐步查看结果:
您可以在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测试器中工作,但结果似乎很有用,但不确定你是什么想要,它确实会回归真实。)