2013-02-12 7 views
1

Я новичок в регулярных выражениях (и в java), поэтому это, вероятно, простой вопрос. Я пытаюсь сопоставить символ {в конце строки. Мои попытки просто:Соответствие {регулярное выражение java

row.matches("{$") 

row.matches("\{$") 

Но как только дать

Исключение в потоке "основной" java.util.regex.PatternSyntaxException: Illegal повторение

Что я делаю неправильно?

ответ

4
row.matches("^.*\\{$"); 

Вам просто нужно избежать {, поскольку это метасимвол. Поскольку Java резервирует одну обратную косую черту для специальных контекстов (\ n, \ r и т. Д.), Для создания одной обратной косой черты для шаблона требуются две обратные слэши. Поэтому

\\{ 

будет правильно оценить,

\{ 

Не только это, но matches метод проверяет, чтобы видеть, тогда и только тогда вся строка матчей, а не только подмножества. Следовательно, ^.* часть

+0

Ну это не дает какие-либо ошибок, но это не дает никаких совпадений либо. И у моей строки наверняка есть {в конце. – user2065207

+0

@ user2065207 - Глупый вопрос; это {, или a}? То есть, какую строку вы пытаетесь сопоставить? –

+0

Я тоже думал об этом. Но это действительно {. – user2065207

2

Вы должны избежать {характера, как это специальный символ для регулярных выражений

row.matches("\\{$") 
2

ли спасаясь работой угла кронштейна?

как в \\{$

Пробовали против

hello world{ 
    whatever{ 
    hello{dontmatch 
    } 
} 

Это согласованный world{ и whatever{, но не hello{dontmatch

2

вам нужно, чтобы избежать { с \ но предотвратить, что \{ читается в качестве специального символа (например, \n для линии) вам нужно также сбежать t он \ с дополнительным \ заканчиваясь к:

row.matches("\\{$"); 
Смежные вопросы