Регулярное выражение, которое соответствует, когда любая строка имеет минимум три символа, а знаки + окружены минимум тремя символами - PullRequest
2 голосов
/ 30 марта 2019

Я хотел создать выражение регулярного выражения, которое соответствует только тогда, когда любая строка имеет три или более символов, и если в строке есть знак «+», то после и до знака «+» должно быть не менее трех необходимых символов,

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

это мое текущее регулярное выражение: (\+[a-z0-9]{3}|[a-z0-9]{0,3})$

ab+abx эта строка не должна совпадать, но в моем регулярном выражении она совпадает

Пример:

Допустимые строки:

sss
sdfsgdf
4534534
dfs34543
sdafds+3232+sfdsafd
qwe+sdf
234+567
cvb+243

Неверные строки:

a
aa
a+
aa+
+aa
+a
a+a
aa+aa
aaa+a

Ответы [ 2 ]

3 голосов
/ 30 марта 2019

Вы можете использовать это регулярное выражение,

^[^+\n]{3,}(?:\+[^+\n]{3,})*$

Пояснение:

  • ^ - начало строки
  • [^+\n]{3,} - Это обеспечивает совпадение с любыми символами, кроме + и новой строки, \n, которые вы можете удалить, если ввод, который вы пытаетесь сопоставить, не содержит символов новой строки и {3,} позволяет соответствовать как минимум трем и более символам

  • (?:\+[^+\n]{3,})* - эта часть дополнительно позволяет сопоставить символ +, затем разделить его по крайней мере тремя или более символами и целым числом ноль или более раз, чтобы сохранить появление + символа необязательно

  • $ - конец ввода

Демо

Редактировать: Обновление решения, где пробел не участвует в подсчете количества символов по обе стороны от +, где минимальное необходимое количество символов было три

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

^(?:[^+\n ] *){3,}(?:\+ *(?:[^+\n ] *){3,})*$

Демо

Кроме того, если вы имеете дело только с буквенно-цифровым текстом, вы можете использовать это более простое и понятное регулярное выражение,

^(?:[a-z0-9] *){3,}(?:\+ *(?:[a-z0-9] *){3,})*$

Демо

2 голосов
/ 30 марта 2019

Вы можете повторить 0+ раз, сопоставляя 3 или более раз то, что указано в классе символов [a-z0-9], перед которым стоит знак плюс:

^[a-z0-9]{3,}(?:\+[a-z0-9]{3,})*$

Это будет соответствовать:

  • ^ Начало строки
  • [a-z0-9]{3,} Совпадение 3+ раз, что указано в классе персонажа
  • (?: Группа без захвата
    • \+[a-z0-9]{3,} Соответствует + знак с последующим совпадением более 3 раз, что указано в классе символов
  • )* Закрыть группу и повторить 0+ раз
  • $ Конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...