web-dev-qa-db-fra.com

Groovy simple remplacer en utilisant regex

J'ai lu des expressions régulières et je pensais que cela fonctionnerait, mais il ne semble pas vouloir fonctionner. Tout ce que je dois faire est de retirer le premier 1 d'un numéro de téléphone s'il existe.

Alors:

def mphone = 1+555-555-5555
mphone.replace(/^1/, "")

Cette sortie ne devrait-elle pas + 555-555-5555?

31
Howes

Je reconnais deux erreurs dans votre code. La première est probablement une faute de frappe: vous n'entourez pas le numéro de téléphone de guillemets, c'est donc un entier: 1 + 555 - 555 - 5555 = -5554

De plus, vous devez utiliser replaceFirst car il n'y a pas de méthode replace dans String prenant un Pattern comme premier paramètre. Cela marche:

def mphone = "1+555-555-5555"
mphone.replaceFirst(/^1/, "")
43
Esteban

replace est une Java méthode de la chaîne Java, qui remplace un caractère par un autre:

assert "1+555-551-5551".replace('1', ' ') == " +555-55 -555 "

Ce que vous recherchez est replaceAll, qui remplacerait toutes les occurrences d'une expression régulière, ou replaceFirst, qui remplacerait uniquement la première occurrence:

assert "1+555-551-5551".replaceAll(/1/, "") == "+555-55-555"
assert "1+555-551-5551".replaceFirst(/1/, "") == "+555-551-5551"

Le ^ dans votre expression régulière signifie que celui-ci doit être au début:

assert "1+555-551-5551".replaceAll(/^1/, "") == "+555-551-5551"

donc le code que vous avez publié était presque correct.

27
Antoine