如何解释相同结构的表达式`(?=\w{6,10})\d+ and (?=abc)ad`?

How to explain the same structure expression `(?=\w{6,10})\d+ and (?=abc)ad`?

debian@wifi:~$ echo "348dfgeccvdf" | grep -oP "\d+(?=\w{6,10})"
348
debian@wifi:~$ echo "348dfgeccvdf" | grep -oP "(?=\w{6,10})\d+"
348

对于\d+(?=\w{6,10}),就是标准的正向预测表达式。
正如 Wiktor Stribiżew 在 post
中所说 position and negative lookbehind
否定后视语法以 (?<! and ends with the unescaped ) 开头。无论它出现在模式的开头、中间还是结尾,它都不会停止作为负面回顾。
也许位置和整个前瞻(后视)表达式之间没有关系。

根据相同的逻辑推断正向前瞻,例如 Wiktor Stribiżew 说负向后视:

"\d+(?=\w{6,10})" == "(?=\w{6,10})\d+"

两人都是正面展望

再举一个例子:

echo  "adabc  adabb" |grep -oP  "ad(?=abc)"
ad
echo  "adabc  adabb" |grep -oP  "(?=abc)ad"

为什么 "ad(?=abc)" 不等于 "(?=abc)ad"
如何解释相同结构的表达式 (?=\w{6,10})\d+ and (?=abc)ad ?

Wiktor Stribiżew say for negative lookbehind:

"\d+(?=\w{6,10})" == "(?=\w{6,10})\d+"

他不是这么说的。他的示例专门针对 字边界 ,这也是一个零长度断言。只有

…(?lookaround)\b… == …\b(?lookaround)…

可以持有。

Why "ad(?=abc)" is not equal to "(?=abc)ad"?

因为一个人在比赛 ad 之后断言序列 abc 而另一个人试图在开始时断言它(这总是会失败)。

Why "ad(?=abc)" is not equal to "(?=abc)ad" ?

ad(?=abc) 解释 ad 后跟 abc(?=abc)ad 将不匹配任何输入字符串。导致期望 'followed by abc' (?=abc) 但在积极前瞻后定义 ad ! .模式应该像这样 (?=abc)\w+ 以匹配此输入字符串 abcad

How to explain the same structure expression (?=\w{6,10})\d+ and (?=abc)ad ?

(?=\w{6,10})\d+ 对于任何输入字符串,此模式也不会与此 (?=abc)ad 匹配。模式应该是这样的:

(?=\w{6,10})\w+(?=abc)\w+.