我正在尝试匹配包含以下内容的字词:eph gro iss
我的eph|gro|iss
与此示例中的eph gro iss
匹配:new grow miss eph
。
但是我需要匹配整个单词。例如,它应该匹配miss
的所有内容,而不仅仅是iss
和grow
,而不仅仅是gro
感谢
答案 0 :(得分:1)
你可以这样做:
\b(\w*(eph|gro|iss)\w*)\b
工作原理:
表达式用词边界锚点\b
括起来,所以它只匹配整个单词。这些单词必须包含其中一个文字eph
,gro
或iss
,但\w*
部分允许文字出现在整个单词的任何位置。
这里重要的是你需要对“单词”采用一些特定的定义。如果您对正则表达式定义没有问题,那么单词是与[a-zA-Z0-9_]+
匹配的序列,那么您可以逐字使用上述内容。
如果您对单词的定义是其他内容,则需要适当地替换\b
定位符和\w
类。
答案 1 :(得分:1)
试试这个:
\b([a-zA-Z]*(?:eph|gro|iss)[a-zA-Z]*)\b
细分:
\b
- 字边界(
- 开始捕获[a-zA-Z]*
- 零个或多个字母(?:eph|gro|iss)
- 你的原始正则表达式,非捕获[a-zA-Z]*
- 零个或多个字母)
- 结束捕获\b
- 字边界示例输出:
php > $string = "new grow miss eph";
php > preg_match_all("/\b([a-zA-Z]*(?:eph|gro|iss)[a-zA-Z]*)\b/", $string, $matches);
php > print_r($matches);
Array
(
[0] => Array
(
[0] => grow
[1] => miss
[2] => eph
)
[1] => Array
(
[0] => grow
[1] => miss
[2] => eph
)
)