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

В Windows вы можете использовать инструментарий управления Windows (WMI), чтобы гарантировать, что приложения с указанной командной строкой не запущены, например:

wmic process where (name="nmake.exe") get commandline | findstr /i /c:"/f load.mak" /c:"/f build.mak" > NUL && (echo THE BUILD HAS BEEN STARTED ALREADY! > %ALREADY_STARTED% & exit /b 1)

449
задан 3 revs, 2 users 75% 1 December 2012 в 18:43
поделиться

3 ответа

Регулярное выражение необходимо сделать не жадным, поскольку по умолчанию "(. *)" будет соответствовать всем "путь к файлу / уровень1 / уровень2" xxx some = "xxx" .

Вместо этого вы можете сделать свою точку-звездочку не жадной, что позволит ей соответствовать как можно меньшему количеству символов:

/location="(.*?)"/

Добавление ? в квантификатор (? , * или + ) делает его нежадным.

1001
ответ дан 22 November 2019 в 22:41
поделиться

location="(.*)" будет соответствовать от " после location= до " после some="xxx, если вы не сделаете его не жадным. Поэтому вам либо нужно .*? (т.е. сделать его не жадным), либо лучше заменить .* на [^"]*.

48
ответ дан 22 November 2019 в 22:41
поделиться

Используйте не жадное сопоставление, если ваш движок поддерживает его. Добавьте символ ? внутри захвата.

/location="(.*?)"/
18
ответ дан 22 November 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: