如何从单词列表(在字符串或数组中)构建一个正则模式,然后用单词边界锚定包围每个单词?

问题描述 投票:0回答:0

我有一串文本和一系列单词:

String: Auch ein blindes Huhn findet einmal ein Korn.
Words: auch, ein, sehendes
我想检查字符串中包含哪个单词。我正在使用

preg_match_all

$pattern = "/\bauch\b|\bein\b|\bsehendes\b/i"; $subject = "Auch ein blindes Huhn findet einmal ein Korn."; preg_match_all($pattern, $subject, $matches); print_r($matches); Array ( [0] => Array ( [0] => Auch [1] => ein [2] => ein ) )
这是按预期的,但是由于我必须经常编辑模式,并且在单词被单词边界锚(

\b

)包围时,我发现它们令人困惑,我想定义单词列表
没有单词边界锚定并在第二步中添加它们。类似: $pattern = "auch|ein|sehendes"; $pattern = "/\b" . $pattern . "\b/i";

当然,这是无法预期的。
我可以用单词和循环填充一个数组以构建图案,但我想避免循环。有什么想法如何做到这一点?

真正的字符串和真实的单词数量很大。

最终我需要匹配的数量,因为它由

preg_match_all返回。对于示例,预期的输出为“ 3”。 the是一个类似的问题,在JavaScript中完成此操作:

在单个正则是所有令牌上的单词边界锚点

您可能会使用关键字的Alternation
,例如

$pattern = "/\b(?:auch|ein|sehendes)\b/i"; $subject = "Auch ein blindes Huhn findet einmal ein Korn."; preg_match_all($pattern, $subject, $matches); print_r($matches); Array ( [0] => Array ( [0] => Auch [1] => ein [2] => ein ) )

php regex pattern-matching
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.