RegEx:匹配第n次出现

时间:2015-02-10 18:06:44

标签: regex pcre

我有以下字符串:

_name=aVlTcWRjVG1YeDhucWdEbVFrN3pSOHZ5QTRjOEJZZmZUZXNIYW1PV2RGOWYrczBhVWRmdVJTMUxYazVBOE8zQ3JNMmNVKzJLM2JJTzFON3FiLzFHUE0xY0pkdz09LS1jbkkwaWoxUUl3YVhMMkhtZHpaOW13PT0"%"3D--57356371d167f"

我希望匹配=和结束" 之间的所有内容(注意此后还有其他引号,所以我不能只选择最后一个"

我尝试使用_name=(.*?)",但字符串中还有其他引号。有没有办法匹配第三个报价?我尝试了_name=(.*?)"{3}{3}匹配了引号背靠背,即"""

您可以尝试here

2 个答案:

答案 0 :(得分:6)

您可以使用此正则表达式:

_name=(?:[^"]*"){3}

RegEx Demo

答案 1 :(得分:1)

如果想要匹配第一个和第三个(!)双引号之间的所有内容(第三个不一定是最后一个,你告诉过),你可以使用这样的模式:

$string = '_name=foo"bar"test" more text"';
// This pattern will not include the last " (note the 2, not 3)
$pattern = '/_name=((.*?"){2}.*?)"/';

preg_match($pattern, $string, $m);
echo $m[1];

输出:

foo"bar"test

原始回答:

我不确定我是否正确使用你,但听起来你想要执行所谓的贪婪匹配,这意味着你要匹配字符串直到最后"无论字符串是否包含多个" s。

要执行贪婪的匹配,只需删除?,如下所示:

_name=(.*)"

您可以在此处试用:https://regex101.com/r/uC5eO9/2