web-dev-qa-db-ja.com

正規表現を使用した単純なGroovy置換

私は正規表現を読んでいて、これはうまくいくと思っていましたが、うまくいきたくないようです。電話番号が存在する場合は、電話番号の先頭の1を削除するだけです。

そう:

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

この出力は+ 555-555-5555になりませんか?

31
Howes

コードに2つのエラーがあることを認識しています。最初はおそらくタイプミスです:電話番号を引用符で囲んでいないため、整数になります:1 + 555-555-5555 = -5554

また、最初のパラメーターとしてパターンを取得するStringにはreplaceFirstメソッドがないため、replaceを使用する必要があります。これは動作します:

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

replaceはJava JavaのStringのメソッドで、文字を別の文字に置き換えます。

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

探しているのはreplaceAllで、これは正規表現のすべての出現を置き換えるか、replaceFirstで、最初の出現のみを置き換えます。

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

^は、正規表現の先頭にある必要があることを意味します。

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

投稿したコードはほぼ正しいものでした。

27
Antoine