正则表达式:如何查找后跟非字母数字的字符串

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);

您的正则表达式几乎正确,但有一些错误:

  1. 我假设您想将 Dog 与后面的 space 匹配,如果是这样,请删除 \s
  2. \p 不是有效的正则表达式字符。
  3. \i 后不应该有额外的斜杠。 \i\ -> \i
  4. 您的正则表达式当前的方式是,它会删除非字母数字字符,您可以通过将其包围在捕获组中来解决此问题。

您也没有添加锚标记的代码 (<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.