2010-11-25 9 views
3

Par exemple,regex pour correspondre à un seul caractère non suivi d'un autre personnage, puis il suffit de remplacer ce caractère initial

(/=[^>]/, '═') 

Je voudrais garder ce match, mais seulement remplacer le signe égal avec le double -ligne horizontale. Comme il est, il correspond à tout '=' qui est suivi de tout ce qui n'est pas un '>' mais remplace à la fois le caractère '=' et le caractère suivant par le caractère de remplacement, je veux garder le caractère suivant, mais remplacer juste le '='. C'est en rubis, si cela fait une différence syntaxique.

entrée Exemple:

= render :partial => 'file' 

First = devrait être converti, seconde doit être préservée

+0

S'il vous plaît donner un exemple des entrées et sorties. Votre expression régulière existante ne peut pas démontrer votre objectif si c'est faux. –

Répondre

12

En fonction de votre bibliothèque regex (je ne sais pas Ruby), vous pourrez peut-être utiliser zéro assertions largeur:

/=(?!>)/ 

Notez que cette regex est légèrement différent de votre regex, mais il correspond à la description que vous avez donnée dans le titre mieux. Il correspondra à tout = qui n'est pas suivi de >. Cela inclut la correspondance d'un = à la fin du texte, que votre version ne correspondra pas.

+0

cela fonctionne parfaitement, merci. – aperture

1

Comme ça? (J'utilise - au lieu de ce caractère spécial que vous avez):

intérieur de RIR:

ruby-1.9.2-p0 > "=x".gsub(/=([^>])/, '-\1') 
=> "-x" 

ruby-1.9.2-p0 > "=>".gsub(/=([^>])/, '-\1') 
=> "=>" 
Questions connexes