Как работает этот код регулярного выражения (положительный прогноз)? [дубликат]

avatar
mp3001
1 июля 2021 в 21:40
46
1
0

Я ввел следующее регулярное выражение:

(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@#$%]).{8,20}

И введите следующую строку ввода для поиска по шаблону:

A00123456789123456789gj673%

Это дало мне соответствующий вывод как:

A0012345678912345678

Можете ли вы объяснить мне, почему это дает мне вывод, когда порядок символов, введенных во входную строку, не соответствует порядку, в котором вводится шаблон регулярного выражения?

Если возможно, пожалуйста, объясните мне, как это работает последовательно.

Источник
Robert Harvey
1 июля 2021 в 21:42
0

Полное описание того, как работает это регулярное выражение, можно найти здесь: regex101.com/r/f3VwEs/1

Turing85
1 июля 2021 в 21:49
0

Пожалуйста, избегайте языкового спама.

Robert Harvey
1 июля 2021 в 21:50
0

@ Turing85: у вас есть права на редактирование. Не стесняйтесь удалять теги, которые не относятся к делу. Это новый участник; Я очень сомневаюсь, что они понимают, что вы подразумеваете под «языковым спамом».

Ответы (1)

avatar
FMoosavi
1 июля 2021 в 21:44
0

Ваш шаблон частично совпадает. Если вы хотите предотвратить совпадение, вы можете сделать это, добавив ^ и $ в начало и конец шаблона.

^: утверждает позицию в начале строки

$: устанавливает позицию в конце строки

Окончательный шаблон будет выглядеть так:

(?=^[a-z]*[A-Z]*[0-9]*[@#$%]*$)(?=(.{8,20}))
Turing85
1 июля 2021 в 21:47
0

ОП попросил объяснения, а не модификации. Это не отвечает на вопрос.

FMoosavi
1 июля 2021 в 21:51
0

@ Turing85 Хорошо, я объясню.

mp3001
1 июля 2021 в 22:08
0

Спасибо за ответ, но он по-прежнему соответствует длине строки от 8 до 20 с любым порядком, например, если ввести входную строку A012345gj673%, она все еще соответствует. Разве это не должно быть в порядке, подобном тому, как после встречи с символом [az] (например, после встречи с ```g`` или `j`` во входной строке выше) он должен искать символ [A-Z]? После этого следуют только символы 6, 7, 3 и %, заглавных букв нет.

FMoosavi
1 июля 2021 в 22:37
0

@mp3001 нашел для тебя пару. и отредактировал ответ. Удачи