【问题标题】:regular expression php tags正则表达式 php 标签
【发布时间】:2012-03-09 23:56:48
【问题描述】:

我平时写简单的正则表达式还不错,但这次我想不通了。

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

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

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

换句话说,我想捕捉所有没有使用变量的打印。

我想出了这样的东西:

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

它不起作用,不知道该怎么写..

【问题讨论】:

  • {^$][^$] 是什么意思?
  • 我的意思是他们都是[^$]

标签: php regex preg-match


【解决方案1】:

这是因为缩写形式的正则表达式是行噪音。没有人应该尝试对它们进行编程,尤其是没有人应该尝试阅读它们。

尝试使用扩展标志 /x,这样您就可以使用空格并添加 cmets,既适用于他人,也适用于未来的自己。

这可以由更擅长正则表达式的人改进,但它为您提供了一个如何开始的示例:

/
<\?                 # 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 中执行此操作的更详细示例。

【讨论】:

  • 这是“插入符号”,而不是“胡萝卜”。很遗憾,因为另一种方式听起来更可爱。
  • 已更正。我在写它的时候就知道了,而且我是一个拼写坚持者。我想我也喜欢它的外观。
【解决方案2】:
<\?(((php)?\s*(echo|print))|=)\s*((\[|\{)\^\$])

地点:

  • &lt;\? - 以 &lt;? 开头

然后是:

  • (php)? - 有没有 php 介绍

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

或:

  • = - 简写回声

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      相关资源
      最近更新 更多