我的网址可以是
"http://example.com/bar1/checkstatus" or "http://example.com/bar2/checkstatus"
在JAVA中,example.com
保持不变,然后紧跟bar1
或bar2
的.matches()函数搜索此URL的最有效方法是什么。 URL的其余部分可能会有所不同。
答案 0 :(得分:3)
最好的方法是不要那样做。
相反,请使用URL
或URI
类来解析URL,然后提取“路径”组件并进行进一步分析。 (您可以使用正则表达式在URL解析器处理转义之后搜索路径...。)
为什么对URL文本使用正则表达式搜索是一个坏主意?
因为:
考虑到这些问题的正则表达式通常很复杂且难以阅读。而且,如果您忽略它们,则在显示各种不同情况的URL时,匹配可能会出现故障。
答案 1 :(得分:0)
我不确定最好的方法,但是我猜测您希望搜索/捕获checkstatus
,为此我们将以一个简单的表达式开始:
(?i)^https?://(?:w{3}\.)?example\.com/bar[12]/([^/]*)/?$
假设会有可选的wwww.
((?:w{3}\.)?
),http
或https
(s?
),并在结尾加上斜杠({{1} }),如果没有的话,我们可以从表达式中删除它们:
/?
(?i)^http://example\.com/bar[12]/([^/]*)$
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex = "(?i)^https?://(?:w{3}\\.)?example\\.com/bar[12]/([^/]*)/?$";
final String string = "http://example.com/bar1/checkstatus\n"
+ "http://example.com/bar2/checkstatus\n"
+ "https://www.example.com/bar1/checkstatus\n"
+ "https://www.example.com/bar2/checkstatus\n"
+ "http://example.com/bar1/checkstatus/\n"
+ "http://example.com/bar2/checkstatus/\n"
+ "https://www.example.com/bar1/checkstatus/\n"
+ "https://www.example.com/bar2/checkstatus/";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
jex.im可视化正则表达式: