正则表达式后续前瞻语句
Regex subsequent lookahead statements
我试图了解正则表达式引擎处理带有后续前瞻语句的表达式的方式。我觉得我可以用两个例子 (javascript syntax) 来最好地说明我的问题。如果我不使用术语,请原谅我。
没有前瞻的示例:
/a(.*b)(.*c)/
这将匹配包含 a
的表达式,该表达式在某些时候后跟 b
,而在某些时候后跟 c
。所以第二个原子团(.*c)
"applies"到第一个原子团(.*b)
。 abc
将满足此表达式,但 acb
不会。
前瞻示例:
/a(?=.*b)(?=.*c)/
== /a(?=.*c)(?=.*b)/
这将匹配一个 a
,如果它在某个时候后面跟着一个 b
并且 它在某个时候也跟着一个 c
。因此,无论顺序如何,两个原子组都适用于 a
字符:a
将在 abc
和 acb
.
中匹配
所以我猜想正则表达式引擎对待前瞻(和后视?)组的方式与对待其他组的方式不同——它们是否会在每个之后返回到 "main" 表达式(在本例中为 a
)遇到超前时间?
提前感谢您的帮助。
Lookaround actually matches characters, but then gives up the match, returning only the result: match or no match.
您可以找到更多信息here。
我试图了解正则表达式引擎处理带有后续前瞻语句的表达式的方式。我觉得我可以用两个例子 (javascript syntax) 来最好地说明我的问题。如果我不使用术语,请原谅我。
没有前瞻的示例:
/a(.*b)(.*c)/
这将匹配包含 a
的表达式,该表达式在某些时候后跟 b
,而在某些时候后跟 c
。所以第二个原子团(.*c)
"applies"到第一个原子团(.*b)
。 abc
将满足此表达式,但 acb
不会。
前瞻示例:
/a(?=.*b)(?=.*c)/
== /a(?=.*c)(?=.*b)/
这将匹配一个 a
,如果它在某个时候后面跟着一个 b
并且 它在某个时候也跟着一个 c
。因此,无论顺序如何,两个原子组都适用于 a
字符:a
将在 abc
和 acb
.
所以我猜想正则表达式引擎对待前瞻(和后视?)组的方式与对待其他组的方式不同——它们是否会在每个之后返回到 "main" 表达式(在本例中为 a
)遇到超前时间?
提前感谢您的帮助。
Lookaround actually matches characters, but then gives up the match, returning only the result: match or no match.
您可以找到更多信息here。