web-dev-qa-db-fra.com

Qu'est-ce qu'une expression régulière pour correspondre à une chaîne NON à la fin d'une ligne?

Le regex /abc$/ correspondra à un abc qui apparaît à la fin de la ligne. Comment faire l'inverse?

Je veux faire correspondre abc qui ne se trouve pas à la fin d'une ligne.

De plus, je vais utiliser l'expression régulière pour remplacer les chaînes, donc je veux capturer uniquement abc, rien après la chaîne, donc /abc.+$/ ne fonctionne pas, car il remplacerait non seulement abc mais aussi après abc.

Quelle est la regex correcte à utiliser?

46
Tim
/abc(?!$)/

(?!$) est un lookahead négatif . Il recherchera toute correspondance d'abc qui n'est pas directement suivie d'un $ (fin de ligne)

Testé contre

  • abcddee (match)
  • dddeeeabc (pas de correspondance)
  • adfassdfabcs (match)
  • fabcddee (match)

l'appliquer à votre cas:

Ruby-1.9.2-p290 :007 > "aslkdjfabcalskdfjaabcaabc".gsub(/abc(?!$)/, 'xyz')
  => "aslkdjfxyzalskdfjaxyzaabc"