匹配未包含某些字符的字符串

时间:2011-08-27 14:17:12

标签: php regex

我正在尝试自动标记检测并转换为超链接。问题是,必须在字符串运行后执行以下操作:

htmlspecialchars($string, ENT_QUOTES, "UTF-8");

现在,即'符号变为'。标签的格式为#[a-Z0-9\-\_]

因此,由于#39部分,脚本将编码的特殊字符视为标记。

我如何与preg_match匹配,以便它不会将#标记前面的&标记为标记?

谢谢!

2 个答案:

答案 0 :(得分:2)

您必须使用 lookbehind assertion 来检查字符串是否前面有&

试试这个:

"/(?<!&)#[\w-]+/"

(?<!&)只有#不在&之前才会匹配。

\w部分与[a-zA-Z0-9_]匹配

您可能还想检查标记前面是空格还是字符串的开头:

"/(:?^|\s)#[\w-]+/"

答案 1 :(得分:0)

使用 Look Behind assertion

  

(?<!a)b匹配“b”,前面没有“a”

在你的情况下,那将是

(?<!&)#[a-Z0-9\-\_]

#

之前的&不匹配