Регулярное выражение для String.replaceAll - PullRequest
2 голосов
/ 17 ноября 2011

Мне нужно регулярное выражение, которое можно использовать с методом replaceAll класса String для замены всего экземпляра * на .*, за исключением того, который имеет конечный \

т.е. конверсия будет

[any character]*[any character] => [any character].*[any character]
* => .*
\* => \* (i.e. no conversion.)

Может кто-нибудь помочь мне?

Ответы [ 2 ]

4 голосов
/ 17 ноября 2011

Использовать вид сзади.

String resultString = subjectString.replaceAll("(?<!\\\\)\\*", ".*");

Объяснение:

"(?<!" +     // Assert that it is impossible to match the regex below with the match ending at this position (negative lookbehind)
   "\\\\" +       // Match the character “\” literally
")" +
"\\*"         // Match the character “*” literally
1 голос
/ 17 ноября 2011

возможно обойтись без групп захвата, но это должно работать:

myString.replaceAll("\\*([^\\\\]|$)", "*.$1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...