Regex в Java: найти все экземпляры [char1], но только если им не предшествует [char2] - PullRequest
0 голосов
/ 30 января 2012

У меня есть следующий метод, где я хочу, чтобы регулярное выражение, данное методу split, находило все экземпляры символа запятой (","), если если перед ним не стоит буква "x".

Метод:

<code>
public void replaceTest3() {
        String valueRaw = "onex,two,three,fourx,five";
        String[] splittedString = valueRaw.split("[(.,)]&&[^x{1}+,]");
        for (int i = 0; i < splittedString.length; i++) {
            System.out.println(splittedString[i]);
        }
}

Таким образом, я ожидаю, что этот метод выведет

<code>
onex,two
three
fourx,five

Однако, какРегулярное выражение в настоящее время таково, что последняя часть, исключающая все вхождения запятых, которым предшествует «x», не работает - очевидно, ничего не найдено.Где моя ошибка и как я могу достичь того, что я хочу сделать?

Ответы [ 3 ]

2 голосов
/ 30 января 2012

найти все вхождения символа запятой (","), если если перед ним не стоит буква "x".

Может быть сделано с отрицательным взглядом, например так:

(?<!x),

Т.е.:

valueRaw.split("(?<!x),");
0 голосов
/ 30 января 2012

Если у вас все в порядке с большим количеством кода, это решение без лишних забот:

0 голосов
/ 30 января 2012

Ваши классы персонажей являются поддельными. Специальные символы теряют свое значение внутри классов символов. Например, [(.,)]&&[^x{1}+,] соответствует "(&&+", ")&&{", ...

...