Заявление Regex Quantifier не выполняется - PullRequest
0 голосов
/ 01 октября 2019

Мне нужно, чтобы мое выражение регулярного выражения выполняло следующее: take:

  • az 0-много раз,
  • 0-9 0-3 раза,
  • & 0-много раз,
  • "" 0-1 раз,
  • минимум 8 символов.

Я также использую этот сайт для проверки своего кода- https://regexr.com.

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

([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,}

Это должно работать:

abcD &EFG,
ABCde f123,
&&12ADSD&&.

это не должно:

a bcD &EFG,
AB5Cde f123,
&&12ADSD&&34,
1234567,
nope.

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

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

Ответы [ 2 ]

1 голос
/ 01 октября 2019

В начале вашего текущего паттерна ([a-zA-Z&]*[0-9]{0,3}[\s]?)\w{8,} есть квантификаторы 0+ раз, 0-3 раза или необязательно.

В конце он должен совпадать как минимум 8+ раз с символом слова, который не будет совпадать ни с однимпримеров.

Вы можете использовать отрицательный прогноз (?!, чтобы утверждать, что не существует 4 цифр или пробелов 2 раза, а затем повторить сопоставление 8+ раз, что указано в классе символов.

^(?!(?:[^\r\n0-9]*[0-9]){4})(?!(?:\S* ){2})[a-zA-Z0-9 &]{8,}$
  • ^ Начало строки
  • (?! Отрицательный взгляд вперед, утверждают, что справа не является
    • (?:[^\r\n0-9]*[0-9]){4} Совпадение 4 раза по цифре
  • ) Закрыть взгляд вперед
  • (?! Отрицательный взгляд вперед, утверждать, что справа нет
    • (?: Группа без захвата
      • \S* Совпадение 0+ раз с непробельным символом, затем совпадение с пробелом
    • ){2} Закройте группу без захвата и повторите 2 раза
  • ) Отрицательный взгляд, утверждайте не 2 пробела
  • [a-zA-Z0-9 &]{8,} Совпадение 8+ раз с любым из tон перечислил
  • $ Конец строки

Regex demo

0 голосов
/ 01 октября 2019

несколько отличается от положительного взгляда

Pattern.compile("(?=^[^ ]* ?[^ ]*$)(?=^([^0-9]*[0-9]?){1,3}$)^[A-Za-z0-9\\& ]{8,}$")

[a-zA-Z0-9\\& ]{8,}: 8 или более символов разрешенных.

(?=^[^ ]* ?[^ ]*$): положительный взгляд: разрешить один пробел

(?=^([^0-9]*[0-9]?){1,3}[^0-9]*$): положительный прогноз, допускающий не более трех экземпляров цифр

https://regex101.com/r/FvaslE/2

...