Поведение точек в шаблонах регулярных выражений - PullRequest
3 голосов
/ 21 сентября 2011
Pattern p2 = Pattern.compile(".*");
Matcher m2 = p2.matcher("true");
System.out.println(m2.matches() + " [" + m2.group() + "]");

Когда я использую код выше, все в порядке. Но я не понимаю, что происходит, когда я использую это регулярное выражение [.]*. Это печатает false.

Как сделать точку как определенный символ? Или как сделать класс символов с любыми символами без \ n и \ r?

Ответы [ 4 ]

7 голосов
/ 21 сентября 2011

Но я не понимаю, что происходит, когда я использую это регулярное выражение [.] *.Это говорит мне ложь.

Поскольку внутри класса символов точка теряет свое особое значение и будет соответствовать простой старой точке (символ .).

За пределамикласс символов точка - это метасимвол, который соответствует любому символу, за исключением символов новой строки (конечно, если вы не используете модификатор Pattern.DOTALL).

Или как создать класссимволов с любыми символами без \ n и \ r.

Используйте отрицательный символьный класс:

 Pattern p2 = Pattern.compile("[^\\r\n]*");

[^\r\n] означает "соответствовать чему-либо, что не a \r или \n.

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

.* означает любой символ 0 или более раз [.]* означает символ точки 0 или более раз

2 голосов
/ 21 сентября 2011

[] - это класс символов, и большинство внутри него обозначают их действительный символ. В этом случае точка будет просто точкой, а не точкой со специальным значением в регулярном выражении.

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

Точка . - это предопределенный класс символов .Он соответствует любому символу (может соответствовать или не соответствовать символу конца строки).Если вы хотите определить класс символов, который включает диапазон значений, вы можете использовать [].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...