Найти повторяющиеся последовательности символов в строке с помощью регулярного выражения в Java - PullRequest
2 голосов
/ 13 апреля 2020

У меня есть строка ввода, и я хочу использовать регулярное выражение, чтобы проверить, имеет ли эта строка = и $, например:

Ввод:

name=alice$name=peter$name=angelina

Вывод: true

Ввод:

name=alicename=peter$name=angelina

Ввод: false

Мое регулярное выражение не работает:

Pattern pattern = Pattern.compile("([a-z]*=[0-9]*$])*");
Matcher matcher = pattern.matcher("name=rob$name=bob");

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

С .matches() вы можете использовать

Pattern pattern = Pattern.compile("\\p{Lower}+=\\p{Lower}+(?:\\$\\p{Lower}+=\\p{Lower}+)*"); // With `matches()` to ensure whole string match

Подробности

  • \p{Lower}+ - 1+ строчные буквы (используйте \p{L} для соответствует любому и \p{Alpha} соответствует только буквам ASCII)
  • = - = символ
  • \p{Lower}+ - 1+ строчные буквы
  • (?:\\$\\p{Lower}+=\\p{Lower}+)* - 0 или более вхождений:
    • \$ - $ char
    • \p{Lower}+=\p{Lower}+ - 1+ строчные буквы, = и 1+ строчные буквы.

См. Java демо :

List<String> strs = Arrays.asList("name=alice$name=peter$name=angelina", "name=alicename=peter$name=angelina");
Pattern pattern = Pattern.compile("\\p{Lower}+=\\p{Lower}+(?:\\$\\p{Lower}+=\\p{Lower}+)*");
for (String str : strs)
    System.out.println("\"" + str + "\" => " + pattern.matcher(str).matches());

Выход:

"name=alice$name=peter$name=angelina" => true
"name=alicename=peter$name=angelina" => false
1 голос
/ 13 апреля 2020

У вас есть дополнительные ] и вам нужно экранировать $, чтобы использовать его в качестве символа, хотя вам также нужно сопоставить последний параметр без $, поэтому используйте

([a-z]*=[a-z0-9]*(\$|$))*

[a-z]*= : соответствует нулю или больше раз, соответствует = символ

[a-z0-9]*(\$|$): соответствует азу и 0-9, ноль или более раз, за ​​которым следует либо $ символ, либо конец совпадения.

([a-z]*=[a-z0-9]*(\$|$))*: сопоставить ноль или более вхождений пар.

Примечание: использовать + (одно или несколько совпадений) вместо * для строгого сопоставления, как:

([a-z]+=[a-z0-9]+(\$|$))*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...