假设我要匹配此文字:
http://localhost:8080/start.jsp;jsessionid=9E4CDB636248C9610F57704E5E07F782?whatever=true&somethingelse=true
使用此正则表达式:
^(.*?start\.jsp)(?:\;jsessionid=[^\?#]*)?(\?[^#]*)?(#.*)?$
结果组是:
http://localhost:8080/start.jsp
?whatever=true&somethingelse=true
一个。为什么不是第2组:;jsessionid=9E4CDB636248C9610F57704E5E07F782
?
第二组开头的这部分?:\
有什么作用?
B中。另外,如果我的选项begin.jsp
和start.jsp
(不仅仅是start.jsp
)在{{1}之前,我如何创建表达式以提取与上述示例相同的组部分?
答案 0 :(得分:3)
(?: )
是非捕获组的语法。正如名称所解释的那样,它没有捕捉到它的匹配。(.*?(?:start|begin)\.jsp)