这个正则表达式意味着什么?

时间:2013-05-15 17:52:16

标签: regex

我在代码^(\s*\n)+

中有这个正则表达式

任何人都可以解释它在寻找什么吗?

我很抱歉这个愚蠢的问题......我花了好几个小时但却得不到答案

5 个答案:

答案 0 :(得分:6)

^匹配字符串的开头。 \s匹配空格(空格,制表符等)。 *表示“不匹配或不匹配”。 \n是换行符。括号将这些组合在一个捕获组中。 +表示前面表达式中的“匹配一个或多个”。

这将匹配字符串开头的所有空白和空白行。

答案 1 :(得分:1)

正则表达式将匹配字符串的开头(或行的开头 - 取决于标志)^,并匹配尽可能多的空行(\s*\n)+。空行是仅由\s定义的空白字符组成的行。最后的\n确保将匹配限制在空白行的末尾,而不是溢出到行的开头的一系列空白字符,这些字符不完全由空格字符组成。

忽略捕获组,正则表达式相当于:

^\s*\n

原因是\s是一个与任何空格字符匹配的简写字符类,它也可以匹配换行符。

如果你想要捕获组:

^(\s*\n)

请注意,原始正则表达式中的重复是多余的,因为\s*的贪心量词已经消耗了尽可能长的字符串,并且无法进行第二次重复迭代。

根据语言的不同,\s可能会略微匹配不同的空白字符集。但是,在大多数正则表达式中,空格(ASCII 32),水平制表符\t,新行\n和回车\r\s匹配。除此之外,\s可以匹配Unicode空白字符(例如.NET),也可以不匹配(Java)。有关详细信息,请参阅特定文档。

答案 2 :(得分:0)

这意味着,匹配以(^)开头的任何字符串零个或多个空格(\s*)后跟一个换行符(\n),后跟任意数字({{ 1}}表示组合中的一个或多个(+)。

括号仅用于分组。

答案 3 :(得分:0)

从字符串的开头(^)开始匹配[ \t\r\n] 0次或更多次,直至最后\n

因此,使用此正则表达式,您基本上是在尝试匹配

字符串的开头

一行或多行空行(即只包含[ \t\r\n]


上面的正则表达式中的

+ 多余,所以没有任何区别! ^(\s*\n)是正确的!

答案 4 :(得分:-2)

它为您提供字符串的第一行(空白或只有空格字符),每个行都在捕获组中

  • ^标记字符串的开头
  • ( .. )+多次使用括号内的正则表达式匹配字符串(但至少一次)
  • \s*匹配无,或任意数量的空白字符[ \t\r\n],最终更多取决于您的编程语言
  • \n匹配换行符