RegEx检测缩进代码块,不包括最终换行符

时间:2015-12-11 21:35:30

标签: regex

我有以下正则表达式来检测缩进(4个空格或制表符)代码块:

^((?:(?:    | *\t)+.*\n?)*)$

我的问题是,虽然这确实会检测到代码块,但后面引用(当我使用$1时也包含最终换行符,我希望它在最后一行结束时结束线。

以下是显示问题的图片:

enter image description here

正如您在第三行中所看到的(使用"三"文本),突出显示一直延伸到结尾,表示它也与换行符匹配。

我如何调整我的正则表达式来解释这个问题?

3 个答案:

答案 0 :(得分:1)

\n?移至开头:^((?:(?:\n? | *\t)+.*)*)$

regex101上查看结果。

答案 1 :(得分:1)

这应该有效:

^((?:(?:    | *\t)+.*\n?)*(?:(?:    | *\t)+.*))$

regex101

答案 2 :(得分:1)

它通常是负匹配的良好正则表达模式,即捕获而不是新行:

((?:^(?:[ ]{4}|\t)(?:[^\r\n]*))+)

Regular expression visualization

https://regex101.com/r/fH4mD5/5