假设我有以下清单:
我有一根绳子:
这香蕉熟了。昨天苹果怎么了?
我想迭代我的列表,并搜索字符串中的整个单词匹配。在第一次迭代中,我可以将单词边界连接到列表项:
\bbanana\b这将捕获上述字符串中的“香蕉”部分。
在第二次迭代中,如果我要做同样的级联,我会得到以下内容:
\bapple(s)\b这与字符串中的apple(s)不匹配,因为结束括号不是单词字符。
为了正确捕获banana和apple(s),我可以将什么连接到列表项?要捕获的子字符串可以在字符串中的任何位置,包括在字符串的开头或结尾处。
我正在使用PHP。
发布于 2018-12-04 06:44:30
这里有一种方法。我们可以手动模拟单词边界标记,而不考虑字符类型,使用查找器。对于左边的\b,我们可以使用(?<=[\s.,;]|^),对于右边的\b,我们可以使用(?=[\s.,;]|$)。
$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单词边界标记被设计用来在单词和非单词之间找到边界,而不是在非单词和其他非单词之间找到边界。
https://stackoverflow.com/questions/53607042
复制相似问题