正则表达式:如何查找后跟非字母数字的字符串
Regex: how to find a string followed by a non alphanumeric
我正在尝试使用正则表达式(在 php 中)来查找必须后跟非字母数字字符(不区分大小写)的特定字符串。
Example String:
Doggy is a lazy dog! Doggy. Dog and I.
Search String: Dog
Expected Result:
Doggy is a lazy <a href="">dog</a>! Doggy. <a href="">Dog</a> and I.
所以它不应该匹配 'Doggy' 因为 Dog 子串后面没有跟一个非字母数字字符。
我正在按照这些思路尝试一些方法,但它并没有完全按照我的要求进行。
preg_replace("/(dog)[^a-zA-Z0-9\s\p]/i/", "", $str);
在我看来,您实际上在这里尝试做的是执行精确单词匹配。不一定 "a string followed by a non-alphanumeric".
您可以使用 \b
"word boundary" 正则表达式锚来实现此目的:
$search = "dog"
preg_replace("/\b".$search."\b/i", "", $str);
您的正则表达式几乎正确,但有一些错误:
- 我假设您想将
Dog
与后面的 space 匹配,如果是这样,请删除 \s
\p
不是有效的正则表达式字符。
\i
后不应该有额外的斜杠。 \i\
-> \i
- 您的正则表达式当前的方式是,它会删除非字母数字字符,您可以通过将其包围在捕获组中来解决此问题。
您也没有添加锚标记的代码 (<a href=""></a>
)。
所以,我已经将所有这些编译成下面的语句:
preg_replace("/(dog)([^a-zA-Z0-9])/i", '<a href=""></a>', $str);
这个returns:
Doggy is a lazy <a href="">dog</a>! Doggy. <a href="">Dog</a> and I.
我正在尝试使用正则表达式(在 php 中)来查找必须后跟非字母数字字符(不区分大小写)的特定字符串。
Example String:
Doggy is a lazy dog! Doggy. Dog and I.
Search String: Dog
Expected Result:
Doggy is a lazy <a href="">dog</a>! Doggy. <a href="">Dog</a> and I.
所以它不应该匹配 'Doggy' 因为 Dog 子串后面没有跟一个非字母数字字符。
我正在按照这些思路尝试一些方法,但它并没有完全按照我的要求进行。
preg_replace("/(dog)[^a-zA-Z0-9\s\p]/i/", "", $str);
在我看来,您实际上在这里尝试做的是执行精确单词匹配。不一定 "a string followed by a non-alphanumeric".
您可以使用 \b
"word boundary" 正则表达式锚来实现此目的:
$search = "dog"
preg_replace("/\b".$search."\b/i", "", $str);
您的正则表达式几乎正确,但有一些错误:
- 我假设您想将
Dog
与后面的 space 匹配,如果是这样,请删除\s
\p
不是有效的正则表达式字符。\i
后不应该有额外的斜杠。\i\
->\i
- 您的正则表达式当前的方式是,它会删除非字母数字字符,您可以通过将其包围在捕获组中来解决此问题。
您也没有添加锚标记的代码 (<a href=""></a>
)。
所以,我已经将所有这些编译成下面的语句:
preg_replace("/(dog)([^a-zA-Z0-9])/i", '<a href=""></a>', $str);
这个returns:
Doggy is a lazy <a href="">dog</a>! Doggy. <a href="">Dog</a> and I.