dqwh1205 2017-08-13 22:55
浏览 300
已采纳

空正则表达式匹配任何字符串

I was trying to find a regex that matches any string! and after some search I found almost all the answers says that [\s\S] will match any string as said here or .* as said here

But while playing a bit with PHP preg_match I found that an empty regex is matching any string!

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;

this will output

empty string matchs
abc matchs
new line matchs
/ matchs

live demo (https://eval.in/845001)

Can I use this empty regex safely to match anything ? and what does an empty regex mean ?

If you are asking why would I need a regex that matches anything, that is because I'm using a function that requires a regex parameter as part of it's string validation functionality and I want it to accept anything.

  • 写回答

2条回答 默认 最新

  • dongteng2534 2017-08-14 09:58
    关注

    An empty regex pattern // matches at start, end and any position between characters in a string. See this demo at eval.in preg_match_all('//', "foo", $out); which returns 4 empty matches:

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

    As preg_match would just check for the first match it should be fine to use the empty pattern. However generally I'd probably prefer /^/ which matches start of the string that every string has.

    [\s\S] (shorts for whitespaces together with non-whitespaces in a character class) means just any character and is usually used line-break related to also match newlines where there is no flag available for making the dot match linebreaks. Often used with JS regex which does not support s flag. Similar are [\D\d] (digits and non-digits), [\w\W] (word characters and non word characters). Also possible with JS regex is [^] a negated empty character class for "not nothing".

    To use /[\s\S]/ or one of the others without quantifier will require at least one character.

    Further to mention that in your patterns you use the u flag for unicode regex. There is probably no reason to use this flag together with an empty pattern or just checking for start of the string. Interesting with pcre unicode regex might be the following escape sequences.

    Well, I don't really see why one would need a pattern to match any string, but wrote for interest :)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog