Регулярное выражение для совпадения строки с алфавитами И числами с длиной больше n? - PullRequest
1 голос
/ 03 ноября 2019

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

У меня есть следующее регулярное выражение, какие виды работ:

[a-z0-9]*([a-z]+[0-9]+)+[a-z0-9]*

результаты:

abc1234aa121aaa //Matches
abc123  //Matches
12abc123sd12 //Matches
abcaaaaaa //Does not match
ab12b12b12b2321b3  //Matches
ab12b12b12b2321b //Matches
1abc1234aa121aaa //Matches
v2  //Matches

но это не сработает, если я хочу сопоставить строки длиной 5 или больше

([a-z0-9]*([a-z]+[0-9]+)+[a-z0-9]*){5,}

Ответы [ 2 ]

1 голос
/ 03 ноября 2019
(?=\w{5,})\w*[0-9]+\w*

Это должно помочь вам. Это регулярное выражение соответствует любой строке символов слова (это \ w * [0-9] + \ w *, где \ w - сокращение от [a-zA-Z0-9 _])

В началеесть положительный взгляд, который утверждает, что в совпадении есть по крайней мере 5 символов слова в строке. Таким образом, любое менее 5 символов в слове провалится.

0 голосов
/ 03 ноября 2019

В первом шаблоне v2 соответствует, но если у вас фиксированный порядок [a-z]+[0-9]+, тогда 2v, например, не будет соответствовать.

Поскольку вы используете квантификатор {5,} во втором шаблоне ииспользуйте [a-z]+[0-9]+ минимальная длина будет по крайней мере 10.

Если вы хотите match a string with alphabets AND numbers with length greater than n, поэтому не должны совпадать только цифры, вы можете использовать:

\b(?=[a-z0-9]{5,})(?=[a-z0-9]*[a-z])[a-z0-9]*[0-9][a-z0-9]*\b
  • \b Граница слова
  • (?=[a-z0-9]{5,}) Утверждение 5 или более раз, символ или цифра 0-9
  • (?=[a-z0-9]*[a-z]) Утверждение, по крайней мере, 1 символ аз
  • [a-z0-9]* Совпадение 0+ раз az или 0-9
  • [0-9] Совпадение цифры 0-9
  • [a-z0-9]* Совпадение 0+ раз az или 0-9
  • \b Граница слова

Regex demo

В Java

String regex = "\\b(?=[a-z0-9]{5,})(?=[a-z0-9]*[a-z])[a-z0-9]*[0-9][a-z0-9]*\\b";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...