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

时间:2013-04-04 07:26:32

标签: php regex pcre regex-lookarounds

相关问题:How can I use regex to match a character (') when not following a specific character (?)?

我正在使用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上的正则表达式的cheatsheets以及http://www.regular-expressions.info/lookaround.html处的一些更有用的信息后,我现在尝试了以下的后视:

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

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

2 个答案:

答案 0 :(得分:2)

你把你的外观置于你的小组([])中,所以它不是这样解释的,而只是你说你只想要那些个别角色。
基本上,我认为你喜欢这样的东西:

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

虽然你应该知道你会受到\\“的控制。例如。

答案 1 :(得分:1)

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

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