Вы не получите правильные совпадения, потому что во второй группе захвата все, что находится между двойными кавычками, использует квантификатор *
, который соответствует 0 или более раз.
Сначала двигатель соответствует 0+ раз [A-Z]*
.Это не присутствует, но это нормально, из-за квантификатора 0+ раз.Тогда следующая часть [^"]*
будет совпадать до тех пор, пока не встретит следующую "
Следующая \/*
не существует, но также в порядке из-за квантификатора 0+ раз, за которым следует [^"]*
, которыйтакже хорошо.
Вместо этого вы можете сначала сопоставить не верхний регистр, пока вы не сопоставите верхний регистр, а затем сопоставить до закрывающих двойных кавычек.
(href\s?=\s?)("[^A-Z\s]*[A-Z][^\s"]*")
Объяснение
(href\s?=\s?)
Группа захвата, совпадение href = в окружении необязательного пробела ("
Запуск группы захвата и сопоставление "
[^A-Z\s]*
Совпадение 0+ раз не в верхнем регистре или пробеле [A-Z]
Совпадение 1 в верхнем регистре [^"\s]*
Совпадение 0+ раз не "
или пробел
")
Совпадение "
и закрытие группы захвата
Regex demo
Без использования групп вы можете использовать:
href\s?=\s?"[^A-Z\s]*[A-Z][^\s"]*"
Regex demo