Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > регулярное выражение


Автор: al1007 15.6.2011, 20:36
Нужно написать проверку, что перед каждым символом 'a' в строке находится чётное число символов.
только с использованием регулярного выражения.

Автор: dobrolub 15.6.2011, 21:07
что-то такое?
Код

import java.util.regex.*;

public class T {
    public static void main(String []args) {
        Pattern p = Pattern.compile("(([a-zA-Z&&[^a^A]]{2})+[aA])+");
        for (String arg: args) {
            System.out.println(arg + ": " + p.matcher(arg).matches());
        }
    }
}


Код

tmp $java T a aa aaa abba abcda ffa ffffa xxxza tuda brabra ttxxattxxa
a: false
aa: false
aaa: false
abba: false
abcda: false
ffa: true
ffffa: true
xxxza: true
tuda: false
brabra: true
ttxxattxxa: true

Автор: aleksandy 16.6.2011, 09:18
По-моему, регулярку следует переписать вот так:
Код
Pattern p = Pattern.compile("(([b-zB-Z]{2})+[aA])+");

Автор: dobrolub 16.6.2011, 09:39
Да, думаю это правильное замечание.

Автор: 2king2 19.6.2011, 09:48
Мне кажется что при первой итерации когда строка равна только 'a', тоже должно быть true. Да ноль это ни четное и ни нечетное, но ИМХО должно быть все же true 

Автор: 2king2 19.6.2011, 17:04
Цитата(2king2 @ 19.6.2011,  09:48)
Мне кажется что при первой итерации когда строка равна только 'a', тоже должно быть true. Да ноль это ни четное и ни нечетное, но ИМХО должно быть все же true

Код

Pattern p = Pattern.compile("(([b-zB-Z]{2})*[aA])");

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)