0

这个有点麻烦。

假设我有一个可以包含这些值的链接:

Balearic|Ibiza|Majorca|Menorca

示例 1:http://site.com/Menorca

示例 2:http://site.com/Ibiza

我只需要一个正则表达式来说明链接是否包含这 4 个中的任何一个(也不区分大小写)

有人可以指出正确的方向吗?它不是特定语言,但我使用的软件是基于 Java 的。

非常感谢 - 同时我会继续努力!:)

4

4 回答 4

1

您可以使用:

// assuming url is your URL variable
if (url.matches("(?i)^http://site\.com/(Balearic|Ibiza|Majorca|Menorca)\b.*$")) {
   // match succeeded
}

(?i)将确保在进行此比较时忽略大小写。

于 2013-06-21T15:12:38.467 回答
0

在这里,您可以找到与您所要求的匹配的正则表达式:

^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
于 2013-06-21T15:09:45.670 回答
0

您的值列表有效的正则表达式,只需添加“i”选项以使其不区分大小写,根据http://rubular.com/r/euscuu7Fwj

于 2013-06-21T15:07:09.560 回答
0

通常针对 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
于 2013-06-21T15:11:22.090 回答