我遇到了一个我不完全理解的正则表达式 - 有人可以帮我破译它吗:
^home(?:\/|\/index\.asp)?(?:\?.+)?$
它用于 url 匹配,上面的示例匹配以下 url:
home
home/
home/?a
home/?a=1
home/index.asp
home/index.asp?a
home/index.asp?a=1
在我看来,括号内的问号
(?:
什么都不做。有人可以启发我。所使用的正则表达式版本是 Classic ASP 提供的版本,如果有帮助的话,它正在服务器上运行。
最佳答案
(?:)
创建一个非捕获组。它将事物组合在一起而不创建反向引用。
反向引用是您可以在表达式中引用的部分或可能的替换(通常通过说 \1
或 $1
等 - 取决于风格)。在编程语言中使用正则表达式时,您通常也可以在之后从匹配中提取它们。使用的唯一理由 (?:)
是为了避免创建新的反向引用,从而避免增加组号,并节省(通常可以忽略的)内存
关于regex - 什么(?: do in a regular expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14138161/