簡體   English   中英

檢索正則表達式匹配的模式

[英]Retrieving Regex matched pattern

我需要從給定的輸入中檢索正則表達式模式匹配的字符串。

可以說,我需要得到的模式是

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

現在,我為此創建了以下正則表達式模式,

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

誰能說明如何使用Java使用此regx表達式檢索所有匹配的模式?

一些簡單的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());
}

您無需掩蓋斜線,但可以掩蓋文字點:

    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

實際上,不清楚是要整個匹配字符串還是僅需要組。

Bogdan Emil Mariesan的答案可以簡化為

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

因為您知道它是數學運算,並且沒有組。

恕我直言,如果您想獲得匹配的組,則未知用戶的答案是正確的。

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

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

但是 ,如果有兩個或多個組,或者如果您需要多次執行,則Pattern.compile方法的性能會更好(例如,在編程競賽中,編寫replaceFirst()更快)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM