我有一个这样的URL:
http://aa-bb.cc-dd-ee.w.x.y.z:8080/funservice/graphql
我只想过滤w.x.y.z
严格为以下值的请求:
fun.foo.bar.net
我正在尝试这样做,但我不太确定如何创建正则表达式。
private static final Pattern pat = Pattern.compile("http(.*?).fun.foo.bar.net(.*?)");
Matcher matcher = pat.matcher(httpRequest.getRequestURL().toString());
while (matcher.find()) {
for (int j = 0; j <= matcher.groupCount(); j++) {
String temp = matcher.group(j);
}
}
2条答案
按热度按时间iibxawm41#
对于您的示例字符串,您可以用途:
模式匹配:
^
字符串开头https?://
将协议与可选的s
匹配\S*
匹配可选的非空格字符\.fun\.foo\.bar\.net
匹配感兴趣的部分(转义圆点以按字面意思匹配)(?::\d+)?
可选匹配端口(?:[/?#]\S*)?
可选匹配/
?
#
之一,后跟可选的非空格字符$
字符串结束Regex demo
在Java中使用双反斜杠:
gopyfrb32#
w.x.y.z
严格为 * 的请求:……”
您可以使用 Matcher#matches 调用来简化代码,该调用可以通过 String#matches 访问。
您可以使用以下模式来匹配整个文本。
对于 match 调用,开始
^
和结束$
是可选的。作为一个说明,我假设您希望 ”fun.foo.bar.net“ 跟随两个 domain-labels,“aa-bb.cc-dd-ee."。
如果不是这种情况,请将
{2}
更改为*
。这里有一个例子。