Php 正则表达式:匹配包含序列的单词
我正在尝试匹配包含以下内容的单词:Php 正则表达式:匹配包含序列的单词,php,regex,Php,Regex,我正在尝试匹配包含以下内容的单词:eph gro iss 我有eph | gro | iss,它将与本例中的eph gro iss匹配:newgrow-miss-eph。 但是我需要匹配整个单词。例如,它应该匹配所有的miss而不仅仅是iss和grow而不仅仅是gro 谢谢您可以这样做: \b(\w*(eph|gro|iss)\w*)\b 工作原理: 表达式用单词边界锚括起来,因此它只匹配整个单词。这些单词必须在某处包含一个文字eph、gro或iss,但\w*部分允许文字出现在整个单词中的任何
eph gro iss
我有eph | gro | iss
,它将与本例中的eph gro iss
匹配:newgrow-miss-eph
。
但是我需要匹配整个单词。例如,它应该匹配所有的miss
而不仅仅是iss
和grow
而不仅仅是gro
谢谢您可以这样做:
\b(\w*(eph|gro|iss)\w*)\b
工作原理:
表达式用单词边界锚括起来,因此它只匹配整个单词。这些单词必须在某处包含一个文字eph
、gro
或iss
,但\w*
部分允许文字出现在整个单词中的任何位置
这里重要的是,你需要对“单词”采用一些特定的定义。如果您同意正则表达式的定义,即单词是匹配[a-zA-Z0-9\]+
的序列,则可以使用上述逐字逐句
如果您对word的定义是其他的,则需要适当地替换\b
锚定和\w
类。尝试以下操作:
\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
)
)
@gpojd:我最初误解了这个问题,请再看一看。@gpojd:
\B
是零宽度,所以它不能捕获任何内容。