怎么做(?:\; jsessionid = [^ \?#] *)?在正则表达式工作?

时间:2011-01-11 12:12:01

标签: regex regex-group

假设我要匹配此文字:

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
  3. 一个。为什么不是第2组:;jsessionid=9E4CDB636248C9610F57704E5E07F782
    第二组开头的这部分?:\有什么作用?

    B中。另外,如果我的选项begin.jspstart.jsp(不仅仅是start.jsp)在{{1}之前,我如何创建表达式以提取与上述示例相同的组部分?

1 个答案:

答案 0 :(得分:3)

  1. (?: )是非捕获组的语法。正如名称所解释的那样,它没有捕捉到它的匹配。
  2. 放置备用匹配的非捕获组:(.*?(?:start|begin)\.jsp)