сопоставление с образцом для строки, имеющей "{" - PullRequest
7 голосов
/ 09 июня 2011

Сначала я сделал это -

String str = "{\"hits\":[{\"links_count\":6,\"forum_count\":11}],\"totalHitCount\":1}";

        Assert.assertTrue(str.matches("{\"hits\":[{\"links_count\":[0-9]{1,},\"forum_count   \":11}],\"totalHitCount\":[0-9]{1,}}"),
            "Partnership message does not appear");

Это привело меня к следующей ошибке -

 Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition
{"hits":[\{"links_count":[0-9]{1,},"forum_count":11}],"totalHitCount":[0-9]{1,}}

Затем я сделал (ускользает от "{") -

String str = "\\{\"hits\":[\\{\"links_count\":6,\"forum_count\":11\\}],\"totalHitCount\":1\\}";

    Assert.assertTrue(str.matches("\\{\"hits\":[\\{\"links_count\":[0-9]{1,},\"forum_count\":11\\}],\"totalHitCount\":[0-9]{1,}\\}"),
            "Partnership message does not appear");

и получил следующую ошибку -

Exception in thread "main" java.lang.AssertionError: Partnership message does not appear expected:<true> but was:<false>

Чего мне здесь не хватает?

Ответы [ 4 ]

5 голосов
/ 09 июня 2011

Вам не нужно экранировать { [ при вводе. Но вам нужно сбежать [ ] в вашем регулярном выражении.

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

String str = "{\"hits\":[{\"links_count\":6,\"forum_count\":11}],\"totalHitCount\":1}";

System.out.println(str.matches("\\{\"hits\":\\[\\{\"links_count\":[0-9]{1,},\"forum_count\":11\\}\\],\"totalHitCount\":[0-9]{1,}\\}"));
3 голосов
/ 09 июня 2011

Правильное регулярное выражение:

str.matches("\\{\"hits\":\\[\\{\"links_count\":[0-9]+,\"forum_count\":[0-9]+\\}\\],\"totalHitCount\":[0-9]+\\}")
3 голосов
/ 09 июня 2011

Вы правильно избегаете фигурных скобок в своем регулярном выражении (строка внутри matches("...")), так как в противном случае они интерпретируются как повторение образца.

Однако вы не должны избегать фигурных скобоквнутри самого str, поскольку это только сломает вещи в вашем случае.

Есть этот замечательный онлайн-инструмент , который вы можете найти полезным при отладке регулярных выражений Java.

0 голосов
/ 09 июня 2011

Вы пропустили квадратные скобки []

String str = "{\"hits\":[{\"links_count\":6,\"forum_count\":11}],\"totalHitCount\":1}";

Это вернет true

Assert.assertTrue(str.matches("\\{\"hits\":\\[\\{\"links_count\":[0-9]{1,},\"forum_count\":11\\}\\],\"totalHitCount\":[0-9]{1,}\\}"),"Partnership message does not appear");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...