2011-09-12 56 views
2

我想要使用我提供的表達式來獲取匹配程序能夠找到的字符串。像這樣的東西..Java:從輸入中獲取匹配的字符串

if(matcher.find()) 
    System.out.println("Matched string is: " + ?); 

這是什麼適當的代碼?根據Oracle

matcher.group(); 

方法只返回所提供的輸入相同,預先

matcher.group(0); 

謝謝..

編輯:下面

實施例如下:

private static String fileExtensionPattern = ".*<input type=\"hidden\" name=\".*\" value=\".*\" />.*"; 
private static Matcher fileXtensionMatcher; 
private static String input = text "<html><body><table width="96"><tr><td><img src=&quot;file:/test&quot; /><input type="hidden" name="docExt" value=".doc" />Employee Trv Log 2011 Training Trip.doc</td></tr></table></body></html>" 

private static void findFileExtension() { 
    System.out.println("** Searching for file extension **"); 
    System.out.println("Looking for pattern: " + fileExtensionPattern); 
    fileXtensionMatcher = fileXtensionExp.matcher(input); 

    if(fileXtensionMatcher.find()) { 
     //the extension expression is contained in the string 
     System.out.println("Extension expression found."); 
     System.out.println(fileXtensionMatcher.group()); 
    } 
} 

得到的結果是:

text "<html><body><table width="96"><tr><td><img src=&quot;file:/test&quot; /><input type="hidden" name="docExt" value=".doc" />Employee Trv Log 2011 Training Trip.doc</td></tr></table></body></html>" 
+1

你嘗試了嗎?如果你這樣做了,你會知道'matcher.group()'將會完成你所需要的。 – Marcelo

+0

@Marcelo請閱讀最後回答評論 – arin

+0

看到源代碼後添加了答案。 – Marcelo

回答

3

當你添加的源代碼,我可以向你保證group()返回整個輸入字符串,因爲它正則表達式匹配。如果你只想要<input>元素使用:

private static String fileExtensionPattern = "<input type=\"hidden\" name=\".*\" value=\".*\" />"; 

或使用:

private static String fileExtensionPattern = ".*(<input type=\"hidden\" name=\".*\" value=\".*\" />).*"; 
. . . 
System.out.println(fileXtensionMatcher.group(1)); 
+0

謝謝,問題是帶「。*」的正則表達式。正如你所說,它匹配整個字符串,並且group()作爲結果返回整個字符串。從開始和結束時刪除「。*」給了我結果。 – arin

4

爲什麼你認爲group()返回輸入?

根據the JavaDoc

返回由以前匹配所匹配的輸入子序列。

換句話說:它返回那部分被匹配的輸入的

+0

不幸的是,這是我的結果。 – arin

+1

@NecArn:請提供一個例子,因爲我知道'group()'返回輸入的混合部分。 –

+0

謝謝@Joachim,這個方法的名字對我來說還不夠清楚。如果不瞭解結果組,就會讓我相信錯誤出現在方法中,而不是提供的正則表達式。 – arin

2

看到您的更新後,似乎您需要匹配組。你也需要讓你的匹配不貪心(.*?而不是.*)。試試這個:

private static String fileExtensionPattern = 
    ".*<input type=\"hidden\" name=\".*?\" value=\"(.*?)\" />([^<]*)"; 

// etc. 
private static void findFileExtension() { 

    // etc. 
    if(fileXtensionMatcher.find()) { 
     // etc. 
     System.out.println(fileXtensionMatcher.group(1)); 
     System.out.println(fileXtensionMatcher.group(2)); 
    } 
} 
+0

非常感謝您的回答。這個結果實際上節省了我使用值域和組(2)的(。*?)提取下一個結果的擴展。 – arin

+1

正如@Marcelo所說,主要問題是正則表達式兩端的外部'。*'。但是,關於使量詞重置爲非貪婪,這是非常好的一點。你也可以使用'\「[^ \」] * \''作爲屬性值。 –