#java #regex
#java #регулярное выражение
Вопрос:
Сначала я сделал это —
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>
Чего мне здесь не хватает?
Ответ №1:
Вам не нужно экранировать {
[
при вводе. Но вам нужно выполнить экранирование [
]
в вашем регулярном выражении.
Попробуйте это:
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,}\}"));
Ответ №2:
Вы правы, экранируя фигурные скобки в вашем регулярном выражении (строка внутри matches("...")
), поскольку в противном случае они интерпретируются как повторение шаблона.
Однако вам не следует избегать фигурных скобок внутри str
самой себя, поскольку это только нарушит работу в вашем случае.
Существует этот приятный онлайн-инструмент, который может оказаться полезным при отладке регулярных выражений Java.
Ответ №3:
Правильное регулярное выражение:
str.matches("\{"hits":\[\{"links_count":[0-9] ,"forum_count":[0-9] \}\],"totalHitCount":[0-9] \}")
Ответ №4:
Вам не хватало квадратных скобок []
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");