我正在尝试创建一个正则表达式,该正则表达式与查询字符串之前具有大写字母的URL匹配。我想捕获包含问号的查询字符串,并且想捕获非查询字符串部分。如果没有查询字符串,但是有一个大写字母,则应捕获非查询字符串部分。
一些例子:
/contextroot/page.html?param1=value1¶m2=value2 NO MATCH
/contextroot/page.html?param=VALUE¶m2=value2 NO MATCH
/contextroot/Page.html?param=value MATCH
/contextroot/Page.html GROUP 1
?param=value GROUP 2
/contextroot/page.HTML MATCH
/contextroot/page.HTML GROUP 1
这是我在正则表达式中的第一个切入点:
^(.*[A-Z].*)(\??.*)$
没了这永远不会捕获查询字符串。
最佳答案
^/contextroot/([^?]*[A-Z][^?]*)(\?.*)?$
说明:
^/contextroot/ # literal start of URL
( # match group 1
[^?]* # anything except `?` (zero or more)
[A-Z] # one capital letter
[^?]* # see above
)
( # match group 2
\? # one ?
.* # anything that follows
)? # optionally
$ # end of string