Регулярное выражение на первой двойной кавычке - PullRequest
0 голосов
/ 05 декабря 2018

Это моя строка '<input type="hidden" name="mode" value="<?=$modeValue?>"/>'

Я пытаюсь взять из нее 1) name="mode" и 2) value="<?=$modeValue?>".

Я запустил два регулярных выражения, чтобы найти/name\s*=\s*['\"].*['\"]/ для name="mode" и /value\s*=\s*['\"].*['\"]/ для value="<?=$modeValue?>"

Но мне не удается получить name="mode" в первом регулярном выражении.Вместо этого я получаю name="mode" value="$modeValue".

Однако мне удалось получить value="<?=$modeValue?>"

Что не так с моим регулярным выражением для name="mode"?По моим наблюдениям, я должен сделать остановку регулярного выражения в первые ", с которыми он сталкивается.Кто-нибудь знает, как это сделать.У меня заканчивается время ...

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Небольшое изменение, и ваше регулярное выражение готово.

name\s*=\s*['\"].*?['\"]
                  ^

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

Итак, добавив ? , мы сделаем его lazy , что означает, что теперь он будет пытаться сопоставить как можно меньше символовcan.

Демо

В случае, если вы хотите объединить оба регулярных выражения.

(name=\".*?\")\s*(value=\".*?\")|(value=\".*?\")\s*(name=\".*?\")

Демо2

0 голосов
/ 05 декабря 2018

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

(name=\".*?\")\s*(value=\".*?\")

Демо:

https://regex101.com/r/z9dDE2/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...