为什么要使用此正则表达式:
Summary:(\r\n\t\t\/\/ (.+))+
不匹配以下字符串的最后一行? (请注意,每行开头的空格是两个制表符,但至少在我的浏览器中,它已转换为所有空格-不过在编辑模式下是正确的。) {1}}量词是否也使最外面的parens中的图案部分也与最后一行匹配?
// // Summary: // Do absolutely nothing and don't do anything else other than to do nothing at // all.
这是http://regexstorm.net/tester上的结果:
答案 0 :(得分:2)
对我来说,这似乎是个错误。看看发生了什么:
Summary:
首先匹配(\r\n\t\t// (.+))+
-在迭代1时,它抓取"\r\n\t\t// Do absolutely nothing and don't do anything else other than to do nothing at\r"
(请注意,.NET正则表达式中的最后一个\r
,.
缺省情况下与CR符号匹配) )+
量词向正则表达式引擎发送信号,以尝试与当前匹配项右边的子字符串进行匹配,即"\n\t\t// all."
。它无法匹配,因为它以\n
开头。该模式应像"\r\n\t\t// (.+)\r\n\t\t// (.+)"
这样展开,以此类推,即\r\n\t\t// (.+)(?:\r\n\t\t// (.+))*
,但它应does not turn on backtracking with (.+)
。实际上,当.+
符合回溯条件时,正则表达式引擎可以用不同的方式重新匹配字符串,但是以某种方式与CR匹配的.
并不想将其退回 >。解决方法是匹配第一个\r
作为可选符号:
Summary:(\r?\n\t\t// (.+))+
或者,仅将CR和LF以外的任何字符与[^\r\n]+
匹配(这将确保第2组捕获堆栈中的值更干净):
Summary:(\r\n\t\t// ([^\r\n]+))+
请参见regex demo。
答案 1 :(得分:-1)