Регулярное выражение для остановки при первом совпадении
Мой шаблон регулярного выражения выглядит примерно как
<xxxx location="file path/level1/level2" xxxx some="xxx">
Меня интересует только часть в кавычках, назначенных местоположению. Разве это не так легко, как показано ниже, без жадного переключателя?
/.*location="(.*)".*/
Кажется, что не работает.
Ответы
Ответ 1
Вам нужно сделать свое регулярное выражение неживым, потому что по умолчанию "(.*)"
будет соответствовать всем "file path/level1/level2" xxx some="xxx"
.
Вместо этого вы можете сделать свою точку-звезду неживой, что сделает ее максимально возможной:
/location="(.*?)"/
Добавление ?
в квантификатор (?
, *
или +
) делает его неживым.
Ответ 2
location="(.*)"
будет соответствовать "после location=
до" после some="xxx
, если вы не сделаете его неживым. Поэтому вам либо нужно .*?
(т.е. Сделать его неживым), либо лучше заменить .*
на [^"]*
.
Ответ 3
Как насчет
.*location="([^"]*)".*
Это позволяет избежать неограниченного поиска с помощью. * и будет точно соответствовать первой цитате.
Ответ 4
Используйте не-жадное соответствие, если ваш движок поддерживает его. Добавить? внутри захвата.
/location="(.*?)"/