如何匹配一个字符串,直到一个字符的第一个实例不跟在另一个特定字符后面


How to match a string until the first instance of a character that does not follow another specific character

相关问题:当不跟随特定字符(?)时,如何使用regex匹配字符(')?

我正在使用regex (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上重新发现regex的备考表以及http://www.regular-expressions.info/lookaround.html上的一些更有用的信息后,我现在尝试了以下回顾:

#"([(?<!'')"]*)"#
但是,现在我得到的是"然后是一个空字符串

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

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

尽管你应该意识到你可能会被"''"之类的人骚扰。

日志中的url将被url编码。因此,以下模式应该可以工作:

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