Как сопоставить строку до первого экземпляра символа, который не следует за другим конкретным символом

Связанный вопрос: Как я могу использовать регулярное выражение для соответствия символу ('), если не следует определенный символ (?)?

Я анализирую журнал с помощью регулярных выражений (библиотека PHP PCRE) и пытаюсь извлечь из него URL-адрес. URL-адрес заключен в двойные кавычки ", но некоторые запросы также включают двойные кавычки". Например:

"https://www.amh.net.au/online/dbSearch.php?t=all&q=\"Rosuvastatin\""

Мой первый шаблон был в основном:

#\"([^\"]*)\"#

Это работало хорошо, пока я не достиг одной из записей, как указано выше, и это усекло совпадение, поэтому все, что я получил, было:

https://www.amh.net.au/online/dbSearch.php?t=all&q=\

После поиска и повторного открытия шпаргалок по регулярному выражению на http://addedbytes.com, а также дополнительной полезной информации на http://www.regular-expressions.info/lookaround.html Я попробовал следующий обзор:

#"([(?<!\\)"]*)"#

Но теперь все, что я получаю, это "", а затем пустая строка


person HorusKol    schedule 04.04.2013    source источник


Ответы (2)


URL-адреса в журналах будут закодированы URL-адресами. Таким образом, должен работать следующий шаблон:

#\"([^ ]*)\"#
person devnull    schedule 04.04.2013

Вы поместили свой lookbehind ВНУТРИ своей группы ([]), поэтому он не интерпретируется как таковой, а просто говорите, что вам нужны только эти отдельные символы.
В основном, я думаю, вам нужно что-то вроде этого:

#"(?:[^"]|(?<=\\)")"#

Хотя вы должны знать, что вас будут троллить, например, \\".

person Loamhoof    schedule 04.04.2013