正则表达式:匹配包含序列的单词

时间:2013-05-24 13:08:54

标签: php regex

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

我的eph|gro|iss与此示例中的eph gro iss匹配:new grow miss eph。 但是我需要匹配整个单词。例如,它应该匹配miss的所有内容,而不仅仅是issgrow,而不仅仅是gro 感谢

2 个答案:

答案 0 :(得分:1)

你可以这样做:

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

工作原理:

表达式用词边界锚点\b括起来,所以它只匹配整个单词。这些单词必须包含其中一个文字ephgroiss,但\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
        )

)