正则表达式匹配任何单个词或什么都不

时间:2017-08-19 09:02:25

标签: php regex preg-replace preg-match

对此有几个问题,但没有一个问题引导我得出答案,它们太具体或太长而复杂。我的更普遍和简单。我有这样的模式:

/you(?:.*)? see/

我想让它匹配除了最后一句之外的所有句子:

you can see
you could see
you see
you could not see

此刻它匹配所有内容,但它也匹配最后一句话。我需要它只匹配任何一个单词或没有单词。我也尝试过这种模式,但它也不起作用:

/you(?:[^\s]+)? see/

2 个答案:

答案 0 :(得分:0)

这个完成工作:

/^you(?:\s+\w+)?\s+see$/

其中(?:\s+\w+)?是一个可选的非捕获组,匹配1个或多个空格后跟1个或多个单词字符(即[a-zA-Z-9_]

在行动中:

$strings = array(
'you can see',
'you could see',
'you see',
'you could not see',
);

foreach ($strings as $str) {
    if (preg_match('/^you(?:\s+\w+)?\s+see$/', $str)) {
        echo "$str : matches\n";
    } else {
        echo "$str : doesn't match\n";
    }
}

<强>输出:

you can see : matches
you could see : matches
you see : matches
you could not see : doesn't match

答案 1 :(得分:0)

我会删除这个问题,因为我很快就解决了这个问题但是已经有了回复。我发现只是改变模式就解决了这个问题:

/you(?:\s[^\s]+)? see/