2017-10-17 3 views
0

J'ai du mal à trouver la bonne expression rationnelle pour le cas où je veux faire correspondre un '%' mais seulement s'il n'est pas précédé d'un '\' entre guillemets.Regex Match% mais pas %

Par exemple, je veux que cela revenir comme un match

Test \ "ce matches de% \" test

Mais ne correspondent

Test \ » ce \ % ne correspond pas \ "test

Un maître regex peut-il être w malade pour m'aider avec ça ?! En fin de compte, mon objectif est de m'assurer que chaque '%' est échappé lorsqu'il se trouve entre guillemets.

Edit: Voici ce que j'ai en ce moment

C'est actuellement ce que j'ai, mais est certainement pas correct.

\ "[%] [^ \%]. \"

+0

Avez-vous déjà essayé quelque chose? Un petit peu de recherche devrait apporter une réponse à cela. – CAustin

+0

Ceci est actuellement ce que j'ai, mais certainement pas correct. \ ". * [%] [^ \%]. * \" – Wes

+0

Que recommanderiez-vous d'utiliser à la place? – Wes

Répondre

2
([^\\]|\\[^%])* 

On dirait que cela semble fonctionner dans mes tests sur https://regex101.com/

Les sections sont Le ()* signifie 0 ou plus du groupe contenu. Le groupe contenu est soit[^\\] ou \\[^%]. Le premier cas est "n'importe quel caractère qui n'est pas un antislash", qui inclut le signe de pourcentage. Le deuxième cas est "un backslash suivi de n'importe quel caractère qui n'est pas un signe de pourcentage".

L'opérateur [^ ] est "n'importe quel caractère sauf ceux-ci."