2017-08-19 32 views
0

关于这个问题有几个问题,但他们都没有让我找到答案,它们都太具体或太长而且很复杂。矿是更一般和简单。我有这样一个规律:正则表达式匹配任何单个单词或没有任何内容

/you(?:.*)? see/ 

我希望它所有的这些句子,除了最后一场比赛:

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

在它匹配的一切的时刻,但它也匹配的最后一句话。我需要它只匹配任何一个单词或没有单词。我也尝试过这种模式,但它并没有完全奏效:

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

回答

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 
+0

似乎不工作时,我测试regex101.com – Hasen

+0

@Hasen:不信任的站点。制作一个脚本,看看它给了什么。看我的编辑。 – Toto

+0

regex101.com不是一些随机网站,它是检查正则表达式模式的标准。所有模式都可以工作100%。你的模式仍然不起作用... – Hasen

0

,因为我解决了它之后不久,但已经有一个回应,我会删除的问题。我发现,只有变着花样这解决了这个问题:

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

请注意,'[^ \ s]'匹配不是空格的所有内容,例如'&#{[|!%...' – Toto

相关问题