0

I have this regular expression in the code ^(\s*\n)+

Can any body please explain what is it looking for?

I am sorry for this silly question..i spent hours but could not get the answer

4

5 回答 5

6

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

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

于 2013-05-15T17:55:59.280 回答
1

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

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

^\s*\n

原因是它\s是一个速记字符类,可以匹配任何空白字符,也可以匹配换行符。

如果你想要捕获组:

^(\s*\n)

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

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

于 2013-05-15T18:13:39.913 回答
0

从 string( ^)的开头匹配[ \t\r\n]0 次或多次,直到最后一次\n

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

字符串开头的1 个或多个空行(即仅包含[ \t\r\n]


+在上面的正则表达式中是多余的,所以没有任何区别!^(\s*\n)是正确的!

于 2013-05-15T18:00:14.037 回答
0

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

括号仅用于分组。

于 2013-05-15T17:54:45.373 回答
-2

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

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