我试图找到一个匹配任何字符串的正则表达式!一些搜索后,我发现几乎所有的答案说,[\s\S]
为表示将匹配任何字符串,在这里或.*
如说这里
但是在使用 PHP 时,preg_match
我发现一个空的正则表达式匹配任何字符串!
if(preg_match("//u", "")) echo "empty string matchs\n";
else echo "empty string does not match\n";
if(preg_match("//u", "abc")) echo "abc matchs\n";
else echo "abc does not match\n";
if(preg_match("//u", "\n")) echo "new line matchs\n";
else echo "new line does not match\n";
if(preg_match("//u", "/")) echo "/ matchs\n";
else echo "/ does not match\n";
exit;
这将输出
empty string matchs
abc matchs
new line matchs
/ matchs
现场演示 ( https://eval.in/845001 )
我可以安全地使用这个空的正则表达式来匹配任何东西吗?一个空的正则表达式是什么意思?
如果你问为什么我需要一个匹配任何东西的正则表达式,那是因为我使用的函数需要一个正则表达式参数作为它的字符串验证功能的一部分,我希望它接受任何东西。
空的正则表达式模式//
匹配字符串中字符之间的开始、结束和任何位置。在 eval.in 中查看此演示,preg_match_all('//', "foo", $out);
其中返回 4 个空匹配项:
Array[0] => [1] => [2] => [3] => )
由于preg_match
将只检查它应该是蛮好用的空模式的第一场比赛。但是通常我可能更喜欢/^/
哪个匹配每个字符串具有的字符串的开头。
[\s\S]
(短裤为空格与在非空格一起字符类)指刚任何字符,通常用于相关线断也匹配换行符其中不存在可用于做出标志点匹配换行符。通常与不支持s
flag 的JS 正则表达式一起使用。类似的是[\D\d]
(数字和非数字),[\w\W]
(单词字符和非单词字符)。JS 正则表达式也可能是[^]
一个否定的空字符类,用于“非空”。
要使用/[\s\S]/
或 其他不带量词之一,至少需要一个字符。
进一步提到,在您的模式中,您使用u
unicode 正则表达式的标志。可能没有理由将此标志与空模式一起使用或仅检查字符串的开头。对 pcre unicode regex感兴趣的可能是以下转义序列。
好吧,我真的不明白为什么需要一个模式来匹配任何字符串,而是为了兴趣而写的:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句