Ошибка Java регулярного выражения - PullRequest
0 голосов
/ 29 октября 2011

Я не могу запустить это регулярное выражение на Java:

 String regex = "/^{m:\"(.*)\",s:([0-9]{1,15}),r:([0-9]{1,15}),t:([0-9]{1,2})}$/";

String data = "{m:\"texttexttext\",s:1231,r:23123,t:1}";
Pattern p = Pattern.compile(regex_Write_clientToServer);

Matcher a = p.matcher(data);

Это то же самое регулярное выражение и те же данные на тестере сайта регулярного выражения (как http://gskinner.com/RegExr/) работает отлично!

Ответы [ 3 ]

4 голосов
/ 29 октября 2011

Две проблемы:

  1. В Java (в отличие от Perl и т. Д.) Регулярные выражения не заключены в / символов
  2. Вы должны экранировать свои { литералы:

Попробуйте это:

String regex = "^\\{m:\"(.*)\",s:([0-9]{1,15}),r:([0-9]{1,15}),t:([0-9]{1,2})\\}$";
3 голосов
/ 29 октября 2011

Есть две проблемы:

  • Косые черты не являются частью самого шаблона и не должны быть включены.
  • Вам нужноизбегать скобок в начале и в конце, иначе они будут рассматриваться как квантификаторы повторения.Это может быть не так в других реализациях регулярных выражений, но это, безусловно, имеет место в Java - когда я попытался просто удалить косую черту, я получил исключение в Pattern.compile.

Попробуйте это:

String regex="^\\{m:\"(.*)\",s:([0-9]{1,15}),r:([0-9]{1,15}),t:([0-9]{1,2})\\}$";

(Это работает с вашими примерами данных.)

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

0 голосов
/ 29 октября 2011

Две вещи: Java не требует, чтобы у вас был какой-либо символ начала / конца. так что вы можете бросить / chars

Кроме того, Java требует от вас избегать любых метасимволов регулярных выражений, если вы хотите сопоставить их. В вашем случае перед скобками '{' и '}' должен стоять двойной обратный слеш (один для java escape, один для regex escape):

"^\\{m:\"(.*)\",s:([0-9]{1,15}),r:([0-9]{1,15}),t:([0-9]{1,2})\\}$"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...