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
是零宽度,所以它不能捕获任何内容。