正则表达式匹配url

时间:2016-12-09 18:39:12

标签: java regex

我想匹配网址的片段部分,这意味着以'#'开头的子字符串。

的网址应该包含片段和查询。所以,如果一个'?'在第一个'#'之前,子字符串"#..."不应该匹配。

带片段的网址示例:

http://exampleurl.com:8080/#this?whole#thing?is#a?fragment

http://exampleurl.com:8080#this?whole#thing?is#a?fragment

http://exampleurl.com#this?whole#thing?is#a?fragment

没有片段的网址示例:

http://exampleurl.com:8080/?#this?whole#thing?is#NOT?a#fragment

http://exampleurl.com:8080/?this?whole#thing?is#NOT?a#fragment

正则表达式应与第一个示例中的"#this?whole#thing?is#a?fragment"匹配,但不应与第二个示例中的任何内容匹配。如前所述,如果有一个'?'在第一个#'之前,它将被视为查询而不是片段。

尝试:

"#+.+$"

上面的正则表达式在第一个示例中正确匹配,但它也匹配第二个示例中的子字符串"#thing?is#NOT?a#fragment",这是不可取的。我不知道如何放入适当的防护装置以防止它与具有“'”的子串相匹配。在它之前。

谢谢!

1 个答案:

答案 0 :(得分:2)

这个正确匹配了所有案例。结果在第一组。

/^[^#?]*(#.*)/gm

在此处查看结果https://regex101.com/r/p6tsh2/1