次の文字列があります。
__name=aVlTcWRjVG1YeDhucWdEbVFrN3pSOHZ5QTRjOEJZZmZUZXNIYW1PV2RGOWYrczBhVWRmdVJTMUxYazVBOE8zQ3JNMmNVKzJLM2JJTzFON3FiLzFHUE0xY0pkdz09LS1jbkkwaWoxUUl3YVhMMkhtZHpaOW13PT0"%"3D--57356371d167f"
_
_=
_と最後の_"
_の間のすべてを一致させたい(この後に他の引用符があるため、最後の_"
_だけを選択できないことに注意してください) )。
_name=(.*?)"
を使用してみましたが、文字列内に他の引用符もあります。 3番目の引用と一致する方法はありますか?私は_name=(.*?)"{3}
を試しましたが、_{3}
_は引用符と連続して一致します。つまり、_"""
_
試すことができます こちら
最初と3番目の二重引用符(!
$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
元の答え:
正しく取得できたかどうかはわかりませんが、いわゆるgreedy matchを実行したいようです。つまり、最後の"
文字列に複数の"
sが含まれているかどうかに関係なく。
貪欲な一致を実行するには、次のように?
をドロップするだけです。
_name=(.*)"
ここで試すことができます: https://regex101.com/r/uC5eO9/2