空正则表达式与任何字符串匹配 [英] empty regex matches any string

查看:22
本文介绍了空正则表达式与任何字符串匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试查找与任何字符串匹配的正则表达式!经过一番搜索,我发现几乎所有的答案都说[sS]将匹配所说的here.*所说的here

但在使用PHP时preg_match我发现空正则表达式与任何字符串都匹配!

if(preg_match("//u", "")) echo "empty string matchs
";
else echo "empty string does not match
";

if(preg_match("//u", "abc")) echo "abc matchs
";
else echo "abc does not match
";

if(preg_match("//u", "
")) echo "new line matchs
";
else echo "new line does not match
";

if(preg_match("//u", "/")) echo "/ matchs
";
else echo "/ does not match
";

exit;

这将输出

empty string matchs
abc matchs
new line matchs
/ matchs

实时演示(https://eval.in/845001)

我可以安全地使用此空正则表达式来匹配任何内容吗?空正则表达式是什么意思?

如果您问我为什么需要匹配任何内容的正则表达式,那是因为我使用的函数需要将regex参数作为其字符串验证功能的一部分,并且我希望它接受任何内容。

推荐答案

空正则表达式模式//与字符串中字符之间的开始、结束和任意位置匹配。在val.inpreg_match_all('//', "foo", $out);查看此演示,它返回4个空匹配:

Array[0] => [1] => [2] => [3] => )

因为preg_match只会检查第一个匹配项,所以使用空模式应该可以。但是,通常我可能更喜欢与每个字符串的开头匹配的/^/

[sS](shorts用于character class中的空格和非空格)表示任意字符,通常还用于匹配没有可用于进行the dot匹配换行符的换行符。通常与JS regex which does not support s flag连用。类似的有[Dd](数字和非数字)、[wW](单词字符和非单词字符)。对于JS正则表达式,[^]"不是什么都不是"的否定空字符类也是可能的。

若要使用/[sS]/或其他不带限定符的字符之一,至少需要一个字符。

进一步提到,在您的模式中,您为Unicode regex使用u标志。可能没有理由将此标志与空模式一起使用,或者只检查字符串的开头。与pcreunicode regex相关的可能是以下转义序列。

嗯,我真的不明白为什么人们需要一个模式来匹配任何字符串,但为了兴趣而写:)

这篇关于空正则表达式与任何字符串匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆