我认为我的正则表达式有效,但我不完全确定。
正则表达式是:
/(\n([ \t]*)){2,}/
最初的目标是一起捕获两个或多个新行,所以如果有人输入\n\n\n\n\n
,我可以用它做点什么。
但是,我不希望连续的新行如尾随空格和制表符之间的干扰......
所以我仍然希望能够抓住\n \t \n\n \n
。
我不确定括号是否过度。
外括号表示我想要所有内容:
(\n([ \t]*))
发生两次或更多次。
然后,内括号:
([ \t]*)
表示我想要任何空格和制表符的组合,范围从none到无穷大,后面的\ n将包含在该组中。内括号的原因是因为我不希望它被解释为(\n[ \t])*
,其中\n
被分组为可能发生的零到无穷大时间。
我的困惑源于括号用于正则表达式中的某些事物,对吧?不确定它是否像数学一样。
答案 0 :(得分:2)
免责声明:“正则表达式”并非一件事;相反,它是由许多不同语言和工具支持的相关符号系列。以下说明适用于最常见的正则表达式,例如Perl,Java,JavaScript,Python和PHP。
/([a-z])\1/
匹配小写的ASCII字母,然后再次匹配相同的字母。 (因此,它与ee
匹配,但不与ef
匹配。)您可以通过编写(?:...)
而非(...)
来禁用此捕获。\n([ \t]*)
,因为它相当于\n[ \t]*
。答案 1 :(得分:1)
内部的parens是没有必要的。 Kleene明星仅适用于最后一场比赛。在这种情况下,[ \t]
不是\n[ \t]
。请注意,在regexp中,每个非特殊字符都是一个匹配操作。只有当您需要将多个字符计为单个匹配操作时,才需要使用parens。
所以,如果你想做"匹配换行符后跟零或更多空格"你这样做:
\n[ \t]*
但是如果你想做"匹配零个或多个换行符后跟一个空格"你这样做:
(\n[ \t])*