Regex 括号可以用于正则表达式中的操作顺序吗?
我想我的正则表达式正在运行,但我不能完全确定 正则表达式是:Regex 括号可以用于正则表达式中的操作顺序吗?,regex,Regex,我想我的正则表达式正在运行,但我不能完全确定 正则表达式是: /(\n([ \t]*)){2,}/ 最初的目标是同时捕获两行或更多新行,因此如果有人键入\n\n\n\n,我可以做一些事情 但是,我不想在连续的新行(如尾随空格和制表符)之间产生干扰 因此,我仍然希望能够捕获\n\t\n\n\n 我不确定括号是否太夸张了 外括号表示我想要里面的一切: (\n([ \t]*)) 发生两次或两次以上 然后,内圆括号: ([ \t]*) 表示我希望在该组中包含从无到无限尾随a\n的空格和制表符的任意
/(\n([ \t]*)){2,}/
最初的目标是同时捕获两行或更多新行,因此如果有人键入\n\n\n\n
,我可以做一些事情
但是,我不想在连续的新行(如尾随空格和制表符)之间产生干扰
因此,我仍然希望能够捕获\n\t\n\n\n
我不确定括号是否太夸张了
外括号表示我想要里面的一切:
(\n([ \t]*))
发生两次或两次以上
然后,内圆括号:
([ \t]*)
表示我希望在该组中包含从无到无限尾随a\n的空格和制表符的任意组合。使用内括号的原因是,我不希望将其解释为(\n[\t])*
,其中\n
被分组为可能发生的零到无限次
我的困惑源于这样一个事实:在正则表达式中,括号用于某些事情,对吗?不确定它是否像数学。不需要内部参数。克莱恩明星只在最后一场比赛中发挥作用。在这种情况下,它是
[\t]
而不是\n[\t]
。请注意,在regexp中,每个非特殊字符都是一个匹配操作。只有当需要将多个字符作为单个匹配操作计数时,才需要使用parens
因此,如果要执行“匹配换行符,后跟零个或多个空格”,可以执行以下操作:
但如果您想“匹配零个或多个换行符,后跟一个空格”,您可以:
免责声明:“Regex”不是一个单一的东西;相反,它是由许多不同语言和工具支持的一系列相关符号。下面的解释涉及最广泛的正则表达式形式,如Perl、Java、JavaScript、Python和PHP
- 是的,括号导致分组,就像在数学中一样
- 此外,括号通常会“捕获”匹配的文本,以便稍后引用该文本。例如,
匹配一个小写ASCII字母,后跟相同的字母。(因此,它匹配/([a-z])\1/
,但不匹配ee
)您可以通过编写ef
而不是只(?:…)
来禁用此捕获(…)
- 然而,正如在数学中一样,您并不总是需要括号,因为有时默认的“操作顺序”是合适的。正如我们通常不写(2x)+3,因为它相当于2x+3,我们通常也不写
,因为它相当于\n([\t]*)
\n[\t]*
{2,}
规则只适用于空白组。无论如何,这将是一个无效的语法,因为{x,y}
不能遵循*
Kleene星只在最后一个匹配上起作用的语句是不合适的,因为*
量词应用于它遵循的模式的一部分,而不是匹配值。
\n[ \t]*
(\n[ \t])*