2013-04-04 6 views
0

Похожих вопросов: How can I use regex to match a character (') when not following a specific character (?)?Как не соответствовать строке до первого экземпляра символа, который не следует другой специфике

Я разбор лога с использованием регулярных выражений (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 я сейчас попытался следующие look- за:

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

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

ответ

1

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

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

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

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

Хотя вы должны знать, что вы бы рующего \\», например