我有以下字符串:
_name=aVlTcWRjVG1YeDhucWdEbVFrN3pSOHZ5QTRjOEJZZmZUZXNIYW1PV2RGOWYrczBhVWRmdVJTMUxYazVBOE8zQ3JNMmNVKzJLM2JJTzFON3FiLzFHUE0xY0pkdz09LS1jbkkwaWoxUUl3YVhMMkhtZHpaOW13PT0"%"3D--57356371d167f"
我希望匹配=
和结束"
之间的所有内容(注意此后还有其他引号,所以我不能只选择最后一个"
)
我尝试使用_name=(.*?)"
,但字符串中还有其他引号。有没有办法匹配第三个报价?我尝试了_name=(.*?)"{3}
但{3}
匹配了引号背靠背,即"""
您可以尝试here
答案 0 :(得分:6)
答案 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