查找没有双字符串的所有行

时间:2016-02-03 20:10:23

标签: regex string vim double pattern-matching

我想找到所有行而不是一个双号。

我知道怎么在一条线上找到双号:

/\zs\(\d\d\d\.\d\d\).*\1\ze

但我不知道如何在没有这个双号的情况下找到行(上面的正则表达式的负匹配)

这个部分是我想要的:

/^\(\(.*\d\d\d\.\d\d.*\)\{2,}\)\@!.*\1.*$

体育专业.: 找不到行201.12 text 201.12 - > OK
但是找不到行201.12 text 203.12 - >不行 必须找到最后一行,因为数字不一样。 我错了什么?

3 个答案:

答案 0 :(得分:2)

试试这个:

/^.*$\&\%(.*\(\d\{3}\.\d\{2}\).*\1\)\@!.*

或魔术:

/\v^.*&%(.*(\d{3}\.\d{2}).*\1)@!.*

编辑:

实际上,\&不是必需的。这个更简单:

\v^%(.*(\d{3}\.\d{2}).*\1)@!.*

答案 1 :(得分:1)

我跟这个:

.*(\d\d\d\.\d\d).*(?=\d\d\d\.\d\d)(?!\1).*

?=是一个不消耗的运算符。它在equals符号的右侧查找正则表达式,但是要通过以下表达式检查它。因此,它再次测试字符串。然后它检查是否包含第一个匹配。如果找到,查询失败(因为?!) - 如果没有找到它继续下一个。*

答案 2 :(得分:1)

这个有点棘手。这是基于先行模式,允许您这样做,假设每行有2个十进制数字:

Service "XEXDB" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
  Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully

RegEx Demo