【问题标题】:Regular expression needed for "<!-- A-Za-z0-9 -->" [closed]“<!-- A-Za-z0-9 -->”需要正则表达式[关闭]
【发布时间】:2013-09-18 17:59:46
【问题描述】:

&lt;!-- A-Za-z0-9 --&gt; 的正则表达式方面需要帮助,其中允许所有大写、小写和数字。需要一个正则表达式来查找这个块,包括评论标签 (&lt;!-- --&gt;)。

【问题讨论】:

  • [] 但它不起作用
  • 那不是任何代码。如果你把代码传递给正则表达式会有所帮助。
  • html 标准像 &lt;!--.*?--&gt; 这样解析 cmets,最好捕获每个评论并测试您的字符串:&lt;!--(.*?)--&gt;,但请记住,这可以在 CDATA 块中,反之亦然.

标签: php regex html


【解决方案1】:
[<!\-\-A-Za-z0-9\-\->]

这是一个字符类,在字符类中顺序无关紧要。然而什么会起作用:

<!--\s*[A-Za-z0-9]+\s*-->

如果您现在想在评论中包含空格,您可以使用:

<!--\s*[A-Za-z0-9 ]+\s*-->

我使用\s* 以防&lt;!----&gt; 与要捕获的部分之间有几个空格。

使用preg_match_all,如果你想让正则表达式更短,你可以使用i标志。像这样:

preg_match_all('~<!--\s*[a-z0-9]+\s*-->~i', $page, $matches);

【讨论】:

  • 太棒了,它奏效了。谢谢你。如果我想在数字键上包含特殊字符,例如 '!@#$%^&*()',是否需要转义它们?
  • @BostonGuy 如果你想包括那些,你用[a-z0-9!@#$%^&amp;*()]+ 替换[a-z0-9]+ 容易,是吗? :) 如果您有 \、- 或 ],则需要转义它们(好吧,如果它位于字符类的开头或结尾,则不是 -,但如果您不确定,请转义它)
  • 是的,我试过了,但我得到如下 PHP 错误 严重性:警告消息:preg_replace() [function.preg-replace]:未知修饰符 '#'。它基本上给了我所有特殊字符的错误。
  • 您使用@ 作为分隔符对吗?使用~,它比@ 少得多。 preg_replace('~&lt;!--\s*[a-z0-9!@#$%^&amp;*()]+\s*--&gt;~i', '', $thing);
【解决方案2】:

根据你的问题我能想到的就这些了

#&lt;!--([A-Za-z0-9]*)--&gt;#

【讨论】:

  • 这也取决于您使用的引擎。 PECL 还是 PCRE?
猜你喜欢
  • 2015-01-07
  • 2021-11-09
  • 2010-12-11
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多