如何解释相同结构的表达式`(?=\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+
.
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+
.