Java Regex - проверить, содержит ли строка непустые усеченные токены, разделенные точкой (.) - PullRequest
1 голос
/ 25 апреля 2020

Я пытаюсь написать регулярное выражение, которое используется для определения, содержит ли строка непустые токены (после обрезки), разделенные ., т. Е. Следующей формы. Это лучшее, что я придумал.

Pattern.compile("^(?!\\.)(?!.*\\.$)(?!.*?\\.\\.)(?!\\p{Space}$)(?!\\p{Space}\\.)(?!.*\\.\\p{Space}$)[\\p{Graph}\\p{Space}]+$", Pattern.UNICODE_CHARACTER_CLASS);

Модульные тесты присутствуют в следующем коде: https://ideone.com/kuej3D

Это работает для всех случаев. Я, однако, чувствую, что есть лучший способ сделать то же самое.

Например,

как проверить форматы формы,

<s1><.s2>*

s1 - непустая строка после усечения начального и конечного пробелов.

. - буквальный период

s2 - непустая строка после усечения ведущий и обучающий пробелы.

* обозначает, что число вхождений может быть минимальным 0 и максимальным бесконечным.

Пример:

alpha$#@.ksj`\\c.lijd*3260_+ - допустимая строка

a b. c d. e f - допустимая строка

alpha. - недопустимая строка

.beta - недопустимая строка

Пустая строка недопустима строка

является недопустимой строкой

x..y..z является недопустимой строкой

Все тестовые примеры в приведенном выше коде ideone должны вывести true.

1 Ответ

3 голосов
/ 25 апреля 2020

Попробуйте это регулярное выражение:

"\\s*[^.\\s]+\\s*(\\.\\s*[^.\\s]+\\s*)*"

Для обрезки оно соответствует необязательным пробелам в начале, до и после каждой точки и в конце. Может быть легче читать без обрезки:

"[^.\\s]+(\\.[^.\\s]+)*"

Этот шаблон соответствует чему-то, что не является точкой и не пробелом, возможно, многократно сопровождаемый . и чем-то, что не является точкой и не пространство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...