为什么在用-zoP调用并匹配后向引用后跟换行符时grep延迟匹配?

时间:2018-10-16 04:45:36

标签: regex grep posix pcre

我有一个文件cases

foo
bar
  cases:
    1: foo
    2: bar
baz
  cases:
    3: baz
quux

由于缩进总是在案例之后再次返回,因此我想用grep -zoP '(\s*)cases:\n(\1.*\n)*' cases列出案例,但是输出

  cases:

  cases:

如果我使用grep -zoP '(\s*)cases:\n(\1.*\n){1,}' cases,则会得到想要的输出:

  cases:
    1: foo
    2: bar
  cases:
    3: baz

这种行为不会与我尝试过的任何类似正则表达式一起出现:

$ grep -o '\(foo\)bar\(\1\)*'<<<$'foobarfoofoofoofoo'
foobarfoofoofoofoo
$ grep -o '\(foo\)bar\(\1\)*'<<<$'foobarfoofoofoofoobax'
foobarfoofoofoofoo
$ grep -oP '(foo)bar(\1)*'<<<$'foobarfoofoofoofoobax'
foobarfoofoofoofoo
$ grep -zoP '(foo)bar(\1)*'<<<$'foobarfoofoofoofoobax'
foobarfoofoofoofoo
$ grep -zoP '(foo)\n*bar'<<<$'foo\n\n\n\n\n'
foo







$

为什么grep希望匹配我的正则表达式0次?

1 个答案:

答案 0 :(得分:0)

我认为这是一个错误,但是我指出\s是POSIX字符类[:space:]的同义词,在C语言环境中对应于[ \t\n\r\f\v],因此匹配前面的换行符。