大括号是否有"但不是更多"运营商?

时间:2014-03-12 17:24:34

标签: regex grep

TL; DR: 大括号是否提供负面预测能力,将结果限制为&#34;不超过最大结果?&#34; < / p>

我可以使用花括号来指定要匹配的最小和(可选)最大字符数:

[abc]{5}      // 5 characters
[def]{2,}     // min 2, but no max
[ghi]{10,20}  // 10-20, inclusive

这很适合发现&#34;合并冲突&#34; VCS输出中的行:

<<<<<<<
=======
>>>>>>>

使用模式^[<=>]{7}

但是花括号有一个&#34;但是没有更多&#34;选项?喜欢与此功能相匹配的内容:^[<=>]{7}(?![<=>])

简单英语:&#34; <=>的7个字符,但下一个字符不是其中之一。&#34;

有些评论栏可能如下所示:

==================================
Some nicely-formatted comment here
==================================

^[<=>]{7}模式认为这是匹配,因为前7个=字符符合标准。 \b似乎不起作用,因为这些字符不符合&#34;字界限&#34;。 \s部分有效,因为<<<<<<<>>>>>>>的VCS输出行通常后跟空格加分支名称,=======后跟换行符(\s在技术上匹配),但也捕获了空白字符本身。

大括号是否可以使用{n,m!}之类的内容,其匹配时间至少n次,但不会超过m次?

或者我是否仍然坚持使用前瞻操作符(?!...)或空格\s

1 个答案:

答案 0 :(得分:2)

  

大括号是否提供负面预测能力

没有

你几乎不需要这个,通常你只是匹配下一个非支撑的角色。如果你确实需要它,你只需要明确附加负向前瞻。

在您的情况下匹配^((<{7}|>{7})(\s\w+)?)|={7})$就可以了。