I'm trying to replace all occurrences of " between two span tags.
I use:
(?<=<span>[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§'])*(\")(?=[a-zA-Z0-9_æøåÆØÅ_,.;:!#€%&\/()$§']*<\/span>)
Lookbehind for letters specialChars
find "
Lookahead for letters specialChars
But with the html string
<span>d"s"s"</span>
It only matches the last occurrence of the "
How can I match (eventually replace) all occurrences of double quotes within the tag?
Thanks in advance.
CodePudding user response:
Don't bother the the look behind. Instead, match "
where </span>
follows without finding <span>
earlier than </span>
, ie "
is inside a span open/close pair:
"(?=((?!<span>).)*<\/span>)
See live demo.
Breaking down the regex:
"
a literal quote(?!<span>).
any character except the<
of<span>
((?!<span>).)*
any characters up to, but not including, the<
of<span>
(?=((?!<span>).)*<\/span>)
followed by input that encounters</span>
before<span>
CodePudding user response:
Use
/(?<=<span>[^<>]*)"(?=[^<>]*<\/span>)/g
See regex proof.
EXPLANATION
--------------------------------------------------------------------------------
(?<= look behind to see if there is:
--------------------------------------------------------------------------------
<span> '<span>'
--------------------------------------------------------------------------------
[^<>]* any character except: '<', '>' (0 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
" '"'
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
[^<>]* any character except: '<', '>' (0 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
< '<'
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
span> 'span>'
--------------------------------------------------------------------------------
) end of look-ahead