Образец взгляда - PullRequest
       9

Образец взгляда

2 голосов
/ 17 сентября 2011
Pattern p = Pattern.compile("(ma)|([a-zA-Z_]+)");
Matcher m = p.matcher("ma");
m.find();
System.out.println("1 " + m.group(1) + ""); //ma
System.out.println("2 " + m.group(2)); // null
Matcher m = p.matcher("mad");
m.find();
System.out.println("1 " + m.group(1) + ""); //ma
System.out.println("2 " + m.group(2)); // null

Но мне нужно, чтобы строка "безумный" была во 2-й группе.

Ответы [ 2 ]

1 голос
/ 17 сентября 2011

Я думаю, что вы ищете что-то вроде:

(ma(?!d))|([a-zA-Z_]+)

из "perldoc perlre":

"(шаблон ?!)" Отрицание нулевой ширинызаблаговременное утверждение.Например, «/ foo (?! Bar) /» соответствует любому вхождению «foo», за которым не следует «bar».

единственное, в чем я не уверен, так это в том, является ли Javaподдерживает этот синтаксис, но я думаю, что это так.

0 голосов
/ 17 сентября 2011

Если вы используете matches вместо find, он попытается сопоставить всю строку с этим шаблоном, что он может сделать, только поместив mad во вторую группу:

import java.util.regex.*;

public class Test {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("(ma)|([a-zA-Z_]+)");
        Matcher m = p.matcher("ma"); 
        m.matches();
        System.out.println("1 " + m.group(1)); // ma
        System.out.println("2 " + m.group(2)); // null
        m = p.matcher("mad"); 
        m.matches();
        System.out.println("1 " + m.group(1)); // null
        System.out.println("2 " + m.group(2)); // mad
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...