匹配带或不带url参数的路径

时间:2017-12-15 11:44:08

标签: java regex

我正在尝试编写一个简单的正则表达式来匹配以下内容:

/path/foo.html
/path/foo.html?a=b
/path/foo.html?a=b&b=c

但不是/path/foo.htmlx或其他不是foo.html + url参数的内容。

我试过

/path/foo.html(?:\?|$)

但它似乎不适用于我的java项目。

3 个答案:

答案 0 :(得分:1)

String.matches(String regex)完全匹配

  

判断此字符串是否与给定的正则表达式匹配。

     

调用str.matches(regex)形式的此方法会产生与表达式

完全相同的结果

因此,例如"/path/foo.html?a=b".matches("/path/foo.html(?:\\?|$)")返回false,因为String不会在?之后结束。

您可以使用"/path/foo.html(\\?.*)?"

答案 1 :(得分:1)

对于URL部分,请使用@reconnect提供的regexp:

int main() { Foo x{1}, y{2}; x += y += 5; std::cout << "x " << x << " y " << y << '\n'; }

从开始到^[^?]*字符符合匹配。

准确搜索/path/foo.html使用:

?

如果你需要检查行中是否存在符合匹配项的部分,请添加^/path/foo.html - 行首和^行结尾,在这种情况下,你应该关心你的结尾之间的字符条件,基本上替换为$

答案 2 :(得分:0)

我并不完全理解您要匹配的内容,但如果您只想匹配没有搜索字符串的网址部分:

/^[^?#]*/

# - hash string,也可以传递一些参数