1

假设我要匹配此文本:

http://localhost:8080/start.jsp;jsessionid=9E4CDB636248C9610F57704E5E07F782?whatever=true&somethingelse=true

使用这个正则表达式:

^(.*?start\.jsp)(?:\;jsessionid=[^\?#]*)?(\?[^#]*)?(#.*)?$

结果组是:

  1. http://localhost:8080/start.jsp
  2. ?whatever=true&somethingelse=true

A. 为什么第 2 组不是这个:;jsessionid=9E4CDB636248C9610F57704E5E07F782?第二组开始的
这部分是做什么的??:\

begin.jspB. 此外,如果我的选项是and start.jsp(不仅仅是start.jsp),我如何创建一个表达式来提取与上面示例相同的组jsessionid

4

1 回答 1

3
  1. (?: )是非捕获组的语法。顾名思义,它没有捕捉到它的匹配。
  2. 放置备用匹配非捕获组:(.*?(?:start|begin)\.jsp)
于 2011-01-11T12:16:03.850 回答