检索正则表达式匹配的模式

时间:2012-03-22 06:32:06

标签: java regex

我需要从给定的输入中检索正则表达式模式匹配的字符串。

让我们说,我需要得到的模式就像,

"http://mysite.com/<somerandomvalues>/images/<againsomerandomvalues>.jpg"

现在我为此创建了以下正则表达式模式

http:\/\/.*\.mysite\.com\/.*\/images\/.*\.jpg

任何人都可以说明如何使用Java?

使用此regx表达式检索所有匹配的模式

3 个答案:

答案 0 :(得分:2)

一些简单的Java示例:

String my_regex = "http://.*.mysite.com/.*/images/.*.jpg";
Pattern pattern = Pattern.compile(my_regex);
Matcher matcher = pattern.matcher(string_to_be_matched);
// Check all occurance
while (matcher.find()) {
    System.out.print("Start index: " + matcher.start());
    System.out.print(" End index: " + matcher.end() + " ");
    System.out.println(matcher.group());
}

答案 1 :(得分:2)

您不会屏蔽斜线而是字面点:

    String regex = "http://(.*)\\.mysite\\.com/(.*)/images/(.*)\\.jpg";
    String   url = "http://www.mysite.com/work/images/cat.jpg";
    Pattern pattern = Pattern.compile (regex);
    Matcher matcher = pattern.matcher (url);

    if (matcher.matches ())
    {
        int n = matcher.groupCount ();
        for (int i = 0; i <= n; ++i)
            System.out.println (matcher.group (i));
    }

结果:

www
work
cat

答案 2 :(得分:1)

事实上,目前尚不清楚您是想要整个匹配字符串还是只需要组。

Bogdan Emil Mariesan's answer可以缩减为

if ( matcher.matches () ) System.out.println(string_to_be_matched);

因为你知道它已经成熟并且没有任何组。

恕我直言,如果您想获得匹配的群组,user unknown's answer是正确的。

我只想添加其他信息(对于其他人),如果您需要匹配的群组,也可以使用replaceFirst()方法:

String firstGroup = string.replaceFirst( "http://mysite.com/(.*)/images/", "$1" );

但是 Pattern.compile方法的性能如果有更好的话,如果有两个或更多组,或者你需要多次这样做(另一方面,在编程竞赛中,它会更快写replaceFirst())。