首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex -如何处理单词边界问题?

Regex -如何处理单词边界问题?
EN

Stack Overflow用户
提问于 2018-12-04 06:40:23
回答 1查看 70关注 0票数 1

假设我有以下清单:

  • 香蕉
  • 苹果公司

我有一根绳子:

这香蕉熟了。昨天苹果怎么了?

我想迭代我的列表,并搜索字符串中的整个单词匹配。在第一次迭代中,我可以将单词边界连接到列表项:

代码语言:javascript
运行
复制
\bbanana\b

这将捕获上述字符串中的“香蕉”部分。

在第二次迭代中,如果我要做同样的级联,我会得到以下内容:

代码语言:javascript
运行
复制
\bapple(s)\b

这与字符串中的apple(s)不匹配,因为结束括号不是单词字符。

为了正确捕获bananaapple(s),我可以将什么连接到列表项?要捕获的子字符串可以在字符串中的任何位置,包括在字符串的开头或结尾处。

我正在使用PHP。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-04 06:44:30

这里有一种方法。我们可以手动模拟单词边界标记,而不考虑字符类型,使用查找器。对于左边的\b,我们可以使用(?<=[\s.,;]|^),对于右边的\b,我们可以使用(?=[\s.,;]|$)

代码语言:javascript
运行
复制
$input = "This banana is ripe. What happened to the apple(s) yesterday?";
preg_match_all ("/(?<=[\s.,;]|^)apple\(s\)(?=[\s.,;]|$)/", $input, $array);
print_r($array[0]);

Array
(
    [0] => apple(s)
)

Regex似乎是一个非常以文本为中心的工具,因此,\b单词边界标记被设计用来在单词和非单词之间找到边界,而不是在非单词和其他非单词之间找到边界。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53607042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档