3

提供された式を使用してマッチャーが検出できる文字列を取得しようとしています。このようなもの..

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

これに適したコードは何でしょうか? オラクルによると、

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>"
4

3 に答える 3

4

group()なぜそれが入力を返すと思いますか?

JavaDocによると:

前の一致で一致した入力サブシーケンスを返します。

つまり、一致した入力の部分を返します。

于 2011-09-12T15:37:44.737 に答える
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));
于 2011-09-12T15:52:21.897 に答える
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));
    }
}
于 2011-09-12T15:52:20.993 に答える