I have the following string:
_name=aVlTcWRjVG1YeDhucWdEbVFrN3pSOHZ5QTRjOEJZZmZUZXNIYW1PV2RGOWYrczBhVWRmdVJTMUxYazVBOE8zQ3JNMmNVKzJLM2JJTzFON3FiLzFHUE0xY0pkdz09LS1jbkkwaWoxUUl3YVhMMkhtZHpaOW13PT0"%"3D--57356371d167f"
I want to match everything between =
and the end "
(note there are other quotes after this so I can't just select the last "
).
I tried using _name=(.*?)"
but there are other quotes in the string as well. Is there a way to match the 3rd quote? I tried _name=(.*?)"{3}
but the {3}
matches for the quotes back to back, i.e. """
You can try it here
You can use this regex:
\b_name=(?:[^"]*"){3}
RegEx Demo
RegEx Details:
\b_name
: Match full word _name
:=
: Match a =
(?:[^"]*"){3}
: Match 0 or more non-"
characters followed by a "
. Repeat this group 3 times.If want to match everything between the first and the third(!) double quote (the third isn't necessarily the last, you told), you can use a pattern like this:
$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];
Output:
foo"bar"test
Original answer:
I'm not sure if I got you correctly, but it sounds like you want to perform a so called greedy match, meaning you want to match the string until the last "
regardless whether the string contains multiple "
s.
To perform a greedy match, just drop the ?
, like this:
_name=(.*)"
You can try it here: https://regex101.com/r/uC5eO9/2
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With