Estou para encontrar uma expressão regular para corresponder a strings dentro de caracteres específicos únicos, mas não múltiplos. Por exemplo:
this is =one= and =two= but not ==three== or ==four== etc
Aqui estou usando =
como delimitador, e quero corresponder a one
e two
porque eles estão dentro de delimitadores simples, mas não a three
ou four
porque eles estão dentro de vários delimitadores.
Achei que usar lookahead e lookbehind negativos resolveria o problema:
/(?<!=)=(.+?)=(?!=)/g
mas acabo combinando as outras strings também, então obviamente não entendo corretamente o trabalho de lookahead e lookbehind negativo quente. Pensei que a expressão significa =
não precedido por um =
, e assim por diante.
Um teste maior inclui sequências de várias linhas:
this is =one= and =two= but not ==three== or ==four==.
====
this shouldn’t count at all
====
Pode haver outra abordagem, que seria bem-vinda, mas acho que uma que usasse lookahead e lookbehind seria mais educativa.
Estou usando PHP e pretendo usar a preg_replace_callback()
função.
=(.+?)=
- a=
correspondência é a "externa" do duplo==
aqui, mas.+
ainda permite=
essa posição também.(?<!=)=([^=]+)=(?!=)
deve resolver o problema.