使用正则表达式替换简单的Groovy

时间:2012-03-20 14:44:28

标签: regex groovy

我一直在阅读正则表达式,我认为这会起作用,但它似乎不想工作。我需要做的就是将电话号码中的前导1删除(如果存在)。

所以:

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

这个输出不应该+ 555-555-5555?

2 个答案:

答案 0 :(得分:41)

我在代码中发现了两个错误。第一个可能是一个错字:你不是用引号括起电话号码所以它是一个整数:1 + 555 - 555 - 5555 = -5554

此外,您应该使用replaceFirst,因为String中没有方法replace将Pattern作为第一个参数。这有效:

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

答案 1 :(得分:27)

replace是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"

所以你发布的代码几乎是正确的。