Java регулярное выражение проверяет строку, состоящую из повторяющихся последовательностей разделенных запятыми цифр, заключенных в скобки - PullRequest
1 голос
/ 24 апреля 2020

У меня есть вход, содержащий повторяющийся шаблон, подобный этому:

 (3,5)(6,7)(8,9).....

Я работаю над регулярным выражением для проверки указанного выше строкового шаблона.

Я пытался:

Pattern.compile("\\((\\d+),(\\d+)\\)")

1 Ответ

1 голос
/ 24 апреля 2020

Если у вас есть указанный шаблон c, который может повторяться один или несколько раз в строке, и вы хотите убедиться, что ваша строка состоит только из повторных вхождений одного и того же шаблона, вы можете использовать

^(?:YOUR_PATTERN)+$
\A(?:YOUR_PATTERN)+\z

Обратите внимание, что $ также соответствует перед окончательным символом новой строки, поэтому якорь \z предпочтителен, когда вам нужно соответствовать самый конец строки.

Если вы разрешите пустую строку, используйте квантификатор * вместо +:

^(?:YOUR_PATTERN)*$
\A(?:YOUR_PATTERN)*\z

В этом случае YOUR_PATTERN равен \(\d+,\d+\), таким образом, повторяется шаблон проверки последовательности будет \A(?:\(\d+,\d+\))+\z.

. В Java вы можете опустить привязки ^ / $ и \A / \z при проверке строки с помощью метода .matches(), поскольку для этого требуется полное совпадение строки:

boolean isValid = text.matches("(?:\\(\\d+,\\d+\\))+");

Или сначала выполните декальцирование экземпляра класса Pattern, а затем создайте сопоставление со строкой в ​​качестве ввода и выполните Matcher#matches()

Pattern p = Pattern.compile("(?:\\(\\d+,\\d+\\))+");
Matcher m = p.matcher(text);
if (m.matches()) {
    // The text is valid!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...