0

我正在尝试匹配包含以下内容的单词:eph gro iss

我有在这个例子eph|gro|iss中匹配的: . 但是我需要匹配整个单词。例如,它应该匹配所有的not just和not justThankseph gro issnew grow miss ephmississgrowgro

4

2 回答 2

1

你可以这样做:

\b(\w*(eph|gro|iss)\w*)\b

这个怎么运作:

该表达式用 word-boundary anchors 括起来\b,因此它只匹配整个单词。这些词必须包含其中一个字面值ephgroiss某处,但这些\w*部分允许字面值出现在整个单词中的任何位置。

这里重要的是您需要对“单词”采用一些特定的定义。如果您对单词是匹配的序列的正则表达式定义感到满意,[a-zA-Z0-9_]+那么您可以逐字使用上述内容。

如果您对单词的定义是其他内容,则需要适当地替换\b锚点和\w类。

于 2013-05-24T13:16:07.067 回答
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
        )

)
于 2013-05-24T13:17:53.060 回答