首页  >  文章  >  后端开发  >  PHP 正则表达式中何时出现单词边界?

PHP 正则表达式中何时出现单词边界?

Linda Hamilton
Linda Hamilton原创
2024-10-21 07:27:02157浏览

When Do Word Boundaries Occur in PHP Regular Expressions?

PHP 正则表达式中的单词边界语义

在 PHP 中,单词边界是使用 b 元字符实现的,它匹配单词字符之间的转换 ( w) 和非单词字符 (W)。但是,其行为可能存在细微差别,如您提供的测试用例所示。

意外的单词边界

在您的测试用例中,您期望以下结果:

preg_match("/(^|\b)@nimal/i", "something@nimal", $match); // false
preg_match("/(^|\b)@nimal/i", "something!@nimal", $match); // true

但实际结果却相反:

preg_match("/(^|\b)@nimal/i", "something@nimal", $match); // true
preg_match("/(^|\b)@nimal/i", "something!@nimal", $match); // false

出现此异常是因为 b 元字符在单词字符 (w) 到非单词字符 (W) 的转换处匹配。在第一种情况“something@nimal”中,单词边界出现在“g”(单词字符)和“@”(非单词字符)之间,从而导致匹配。然而,在第二种情况“something!@nimal”中,“!”之间没有单词边界。和“@”,因为两者都是非单词字符。

匹配单词开头

要匹配以特定序列开头的单词,您需要确保有目标序列之前的单词边界 (b)。例如,要匹配以“@nimal”开头的单词,您可以使用以下正则表达式:

preg_match("/(\b)@nimal/i", "something@nimal", $match); // true
preg_match("/(\b)@nimal/i", "something!@nimal", $match); // false

在此正则表达式中,单词边界 (b) 将确保存在从单词字符的转换“@nimal”之前的非单词字符。这将匹配以“@nimal”开头的单词,但不匹配中间有“@nimal”的单词,例如“ducat”。

以上是PHP 正则表达式中何时出现单词边界?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn