这个有点麻烦。
假设我有一个可以包含这些值的链接:
Balearic|Ibiza|Majorca|Menorca
示例 1:http://site.com/Menorca
示例 2:http://site.com/Ibiza
我只需要一个正则表达式来说明链接是否包含这 4 个中的任何一个(也不区分大小写)
有人可以指出正确的方向吗?它不是特定语言,但我使用的软件是基于 Java 的。
非常感谢 - 同时我会继续努力!:)
您可以使用:
// assuming url is your URL variable
if (url.matches("(?i)^http://site\.com/(Balearic|Ibiza|Majorca|Menorca)\b.*$")) {
// match succeeded
}
(?i)
将确保在进行此比较时忽略大小写。
在这里,您可以找到与您所要求的匹配的正则表达式:
^http://site\.com/(Balearic|Ibiza|Majorca|Menorca)$
要在 Java 中使用它,您可能需要执行以下操作:
String url = "http://site.com/Ibiza";
Pattern p = Pattern.compile("^http://site\.com/(Balearic|Ibiza|Majorca|Menorca)$", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(url); // get a matcher object
您的值列表是有效的正则表达式,只需添加“i”选项以使其不区分大小写,根据http://rubular.com/r/euscuu7Fwj
通常针对 URL 的正则表达式不是一个好习惯。
这是一种混合方法。它将仅在 URL 的路径中查找您的值,从而简化正则表达式并验证 URL。不区分大小写。
try {
URI menorca = new URI("http://site.com/Menorca");
System.out.println(menorca.getPath().substring(1));
URI ibiza = new URI("http://site.com/Ibiza");
System.out.println(ibiza.getPath().substring(1));
Pattern pattern = Pattern.compile("Balearic|Ibiza|Majorca|Menorca", Pattern.CASE_INSENSITIVE);
System.out.println(pattern.matcher(menorca.getPath()).find());
System.out.println(pattern.matcher(ibiza.getPath()).find());
}
catch (URISyntaxException use) {
use.printStackTrace();
}
输出:
Menorca
Ibiza
true
true