Java: получить соответствующую строку из ввода - PullRequest
3 голосов
/ 12 сентября 2011

Я пытаюсь получить строку, которую мой сопоставитель может найти, используя предоставленное мной выражение.Примерно так ..

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

Ответы [ 3 ]

4 голосов
/ 12 сентября 2011

Почему вы думаете, что group() возвращает входные данные?

Согласно JavaDoc :

Возвращает входную подпоследовательность, совпадающую с предыдущим соответствием.

Другими словами: он возвращает ту часть соответствующего входа.

3 голосов
/ 12 сентября 2011

После того, как вы добавили исходный код, я могу заверить вас, что 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));
2 голосов
/ 12 сентября 2011

После просмотра вашего обновления кажется, что вам нужны группы соответствия.Также вам нужно сделать ваши спички нежадными (.*? вместо .*).Попробуйте это:

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));
    }
}
...