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

Linda Hamilton
发布: 2024-10-21 07:27:02
原创
155 人浏览过

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!