Je cherche à remplacer les expressions régulières par des expressions régulières dans Sublime Text 2. Le documentation à ce sujet est plutôt anémique. Plus précisément, je souhaite effectuer un remplacement sur les groupes, ce qui revient à convertir ce texte:
Hello my name is bob
Et ce terme de recherche:
Trouver quoi: my name is (\w)+
Remplacez par: my name used to be $(1)
Le terme de recherche fonctionne très bien, mais je ne trouve pas de moyen de remplacer le groupe à l’aide du groupe regexp.
Habituellement, une référence arrière est $1
ou \1
(barre oblique inverse) pour le premier groupe de capture (la première correspondance d'un motif entre parenthèses). Alors peut-être essayer:
my name used to be \1
ou
my name used to be $1
PDATE: Comme l'ont souligné plusieurs personnes, votre modèle de capture d'origine est incorrect et ne capture que la dernière lettre du nom plutôt que le nom complet. Vous devez utiliser le modèle suivant pour capturer toutes les lettres du nom:
my name is (\w+)
À propos, dans la question ci-dessus:
Pour:
Hello, my name is bob
Trouver une partie:
my name is (\w)+
Avec remplacer partie:
my name used to be \1
Retournerais:
Hello, my name used to be b
Remplacez la recherche par:
my name is (\w+)
Et remplacer sera ce que vous attendez:
Hello, my name used to be bob
Bien que (\ w) + corresponde à "bob", ce n'est pas le groupe que vous souhaitez remplacer.
Utilisez les parenthèses () dans votre chaîne de recherche
Il y a une chose importante à souligner! Tous les segments correspondants dans votre chaîne de recherche que vous voulez utiliser dans votre chaîne de remplacement doivent être entourés de () parenthèses, sinon ces segments correspondants ne sera pas accessible avec des variables telles que $ 1, $ 2, ... ni\1,\2, .. et etc.
EXEMPLE:
Nous voulons remplacer "em" par "px" mais conserver les valeurs numériques:
margin: 10em
margin: 2em
Nous utilisons donc le margin: $1px
comme chaîne de remplacement.
CORRECT: Embrassez le segment correspondant $1
correspondant par ( )
parenthèses comme suit:
FIND: margin: ([0-9]*)em
(avec des parenthèses)
REMPLACER PAR: margin: $1px
RÉSULTAT:
margin: 10px
margin: 2px
WRONG: Le modèle d'expression régulière suivant correspondra aux lignes souhaitées, mais les segments correspondants ne seront pas disponibles dans la chaîne remplacée sous forme de variables telles que $1
:
TROUVER: margin: [0-9]*em
(sans parenthèses)
REMPLACER PAR: margin: $1px
RÉSULTAT: ($1
n'est pas défini)
margin: px
margin: px
Notez que si vous utilisez plus de 9 groupes de capture, vous devez utiliser la syntaxe ${10}
.
$10
ou \10
ou \{10}
va pas fonctionner.
En regardant article de la documentation non officielle de Sublime Text sur la recherche et le remplacement , il semble que +(.+)
soit le groupe de capture que vous souhaitez peut-être ... mais j'ai personnellement utilisé (.*)
et cela a bien fonctionné . Pour REMPLACER comme vous le dites, vous pourriez aimer ceci conversation dans les forums , plus précisément cet article qui dit simplement utiliser $1
pour utiliser le premier capturé groupe.
Et comme les images valent mieux que les mots ...