0

相关问题:当​​不跟随特定字符(?)时,如何使用正则表达式匹配字符(')?

我正在使用正则表达式(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上的一些更有用的信息之后, 我现在尝试了以下后视:

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

但是,现在我得到的只是“”,然后是一个空字符串

4

2 回答 2

2

你把你的lookbehind放在你的组内([]),所以它不会被解释为这样,而只是你说你只想要那些单独的字符。
基本上,我认为你会喜欢这样的东西:

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

虽然你应该知道你会被 \\" 例如。

于 2013-04-04T07:38:06.757 回答
1

日志中的 URL 将是 URL 编码的。因此,以下模式应该有效:

#\"([^ ]*)\"#
于 2013-04-04T07:45:07.823 回答