12
votes

Expression de regex à la référence arrière plus de 9 valeurs dans un remplacement

J'ai une expression de regex qui traverse une chaîne et tire 40 valeurs, il semble trier si comme la requête ci-dessous, mais beaucoup plus grande et plus compliquée xxx

ma question est comment Utilisez ces expressions avec la commande Remplacer lorsque le numéro dépasse 9. Il semble que lorsque j'utilise lorsque j'utilise \ 10 il renvoie la valeur pour \ 1 , puis ajoute un 0 à la fin.

Toute aide serait très appréciée merci :)

J'utilise aussi uestudio, mais si un programme différent le fait mieux alors pas de biggie: )


1 commentaires

Dans le texte sublime, "\ 10" ne fonctionne pas non plus, mais "10 $" fonctionne.


5 Réponses :


4
votes

La plupart des moteurs de regex simples utilisés par les éditeurs ne sont pas équipés pour gérer plus de 10 groupes correspondants; s> il ne semble pas comme ultradedit. Je viens d'essayer Notepad ++ et ce n'est même pas match em> une regex avec 10 groupes.

Votre meilleur pari, je pense, est d'écrire quelque chose de rapide dans une langue rapide avec un analyseur de regex décent. mais cela ne répondrait pas à la question comme demandé forte> p>

voici quelque chose en python: p> xxx pré>

Notez que Python permet à Python permet à Python Comme \ 20 code>: Pour avoir une brouillon au groupe 2 suivi d'un 0 littéral 0, vous devez utiliser \ g 0 code>, qui est sans ambiguïté. p>

EDIT: La plupart des saveurs de regex et des éditeurs qui incluent un moteur de regex devraient suivre la syntaxe remplacée comme suit: p>

abcdefghijklmnop
search: (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(?<name>.)(.)
note:    1  2  3  4  5  6  7  8  9  10 11 12 13
value:   a  b  c  d  e  f  g  h  i  j  k  l  m
replace result:
    \11      k1      i.e.: match 1, then the character "1"
    ${12}    l       most should support this
    ${name}  l       few support named references, but use them where you can.


1 commentaires

"Certaines personnes, lorsqu'elles sont confrontées à un problème, pensent" que je sais, je vais utiliser des expressions régulières. "Maintenant, ils ont deux problèmes." - Jamie Zawinski La citation ci-dessus n'a jamais semblé si vraie :( merci pour l'aide :)



1
votes

Si vous ne pouvez pas gérer plus de 9 sous-groupes, pourquoi ne pas correspondre initialement à des groupes de 9, puis de boucle et d'appliquer des expressions à ces matchs?

I.e. Premier match () + puis pour chaque match de sous-groupe sur . .


1 commentaires

Malheureusement, dans mon cas qui ne fonctionnerait pas, le modèle est assez grand. Cependant, j'apprécie la suggestion. Merci :)



14
votes

Comme indiqué par Psycho BRM : Utilisez 10 $ au lieu de \ 10 J'utilise Notepad ++ et ça marche Beautifull.


1 commentaires

Travaille sur sublime. Éventuellement sur d'autres. Est-ce que quelqu'un sait quelle standard cette notation $ fait partie de?



1
votes

essayez d'utiliser des groupes nommés; Donc, au lieu du dixième: xxx

Utilisez: xxx

puis utilisez la chaîne de remplacement suivante: xxx

(c'est bien sûr en l'absence d'une meilleure solution à l'aide de bouclures et rappelez-vous qu'il pourrait y avoir différentes flavors de syntaxe de regex en fonction de votre environnement.)


1 commentaires

Cela a fonctionné pour moi lors de l'utilisation de REGEX à Nginx, qui ne semble pas aimer plus de 9 groupes. Même numéro, l'OP a l'endroit où 10 $ est interprété comme $ 1 + 0.



3
votes

Mettez un $ en face du sous-groupe à double chiffre: par exemple \ 1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 \ 9 \ 9 $ 10 Cela a fonctionné pour moi.


1 commentaires

Wow, merci pour la pointe. Cela fonctionne très bien dans le Bloc-notes ++ :)