对此有几个问题,但没有一个问题引导我得出答案,它们太具体或太长而复杂。我的更普遍和简单。我有这样的模式:
/you(?:.*)? see/
我想让它匹配除了最后一句之外的所有句子:
you can see
you could see
you see
you could not see
此刻它匹配所有内容,但它也匹配最后一句话。我需要它只匹配任何一个单词或没有单词。我也尝试过这种模式,但它也不起作用:
/you(?:[^\s]+)? see/
答案 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/