Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 你能破译这个正则表达式模式吗_Regex - Fatal编程技术网

Regex 你能破译这个正则表达式模式吗

Regex 你能破译这个正则表达式模式吗,regex,Regex,我在读别人的代码时遇到了这段正则表达式。谁能说出作者想做什么 if(str.matches("^\\s*$") && !str.matches("^\\s*#.*")) { // do something } 第一个正则表达式匹配包含完全空白字符(例如空格和制表符)的任何行 第二个正则表达式似乎是多余的,因为它将匹配以散列开头的行,不包括前导空格。这样的一行无论如何都不会匹配第一个正则表达式 更新:我猜作者也打算否定第一个正则表达式。如果的行看起来不像注释,那么它

我在读别人的代码时遇到了这段正则表达式。谁能说出作者想做什么

if(str.matches("^\\s*$") && !str.matches("^\\s*#.*")) {
       // do something
}

第一个正则表达式匹配包含完全空白字符(例如空格和制表符)的任何行

第二个正则表达式似乎是多余的,因为它将匹配以散列开头的行,不包括前导空格。这样的一行无论如何都不会匹配第一个正则表达式


更新:我猜作者也打算否定第一个正则表达式。如果的行看起来不像注释,那么它将运行
的主体。

第一个模式查找空行,即只包含空格(空格、制表符等)的行

第二种模式查找以空格开头,后跟
#
(散列)的行,并忽略它们

这很奇怪;任何与第一个正则表达式匹配的东西都不会与第二个正则表达式匹配,因此第二个测试毫无意义。为了说明问题,测试可能应该是:

if (!str.matches("^\\s*$") && !str.matches("^\\s*#.*")) {
       // do something with non-blank, non-comment lines
}
或:


如果字符串仅由空格组成,则第一个正则表达式返回true。第二个检查它是否不是包含
#
(前面有空格,后面有随机内容)的字符串,但这永远不会发生,因为该字符串只包含空格。这看起来像一个bug…

这只检查完全由空格(或空字符串)组成的字符串。第二个正则表达式没有任何功能,因为与第一个正则表达式匹配的任何字符串都不会与第二个正则表达式匹配。

str.matches(“^\\s*$”)
表示“字符串是空的还是只包含空格”和
!str.matches(“^\\s*#.*)
表示“字符串与某些前导空格不匹配,后跟一个#,后跟任何其他字符的0或更多”,这基本上就是说“字符串是否没有前导字符”

我不知道他想做什么。但他实际做的是证明他不懂正则表达式。。。或者布尔逻辑:-)@Stephen:或者,作者可能对正在寻找的条件感到困惑。在限制范围内,正则表达式是良好的;这是连接两个测试的逻辑导致了麻烦。我当时很轻率。。。
if (!str.matches("^\\s*$") && !str.matches("^\\s*#.*")) {
       // do something with non-blank, non-comment lines
}
if (str.matches("^\\s*$") || str.matches("^\\s*#.*")) {
       // do something with all blank or all comment lines (like ignore them)
}