Регулярное выражение для остановки при первом совпадении

Мой шаблон регулярного выражения выглядит примерно как

<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="(.*?)"/