Groovy字符串替换

时间:2012-02-04 15:08:03

标签: regex string groovy replace

我有以下格式的字符串

some other string @[Foo Foo](contact:2) some other string @[Bar Bar](contact:1) still some other string

现在我想把这个字符串变成

some other string <a href="someurl/2">Foo Foo</a> some other string <a href="someurl/1">Bar Bar</a> still some other string

所以基本上需要使用groovy&amp;使用reg ex将@[Some name](contact:id)替换为url这是有效的方法吗

2 个答案:

答案 0 :(得分:11)

您可以将Groovy replaceAll String方法与分组正则表达式一起使用:

"some other string @[Foo Foo](contact:2) some other string @[Bar Bar](contact:1) still some other string"
.replaceAll(/@\[([^]]*)]\(contact:(\d+)\)/){ all, text, contact ->
    "<a href=\"someurl/${contact}\">${text}</a>"
}

/@\[([^]]*)]\(contact:(\d+)\)/ =〜@[Foo Foo](contact:2)
/开始正则表达式模式
@匹配@
\[匹配[
(开始文字[^]]*匹配Foo Foo
)结束文字]匹配]
\(contact:匹配(contact:
(开始联系\d+匹配2
)结束联系\)匹配)
/结束正则表达式模式

答案 1 :(得分:1)

你没有提到编程语言,但一般假设语言以某种方式调用regexp语法:

s/@\[([^\]]+)\]\([^:]+:([0-9]+)\)/<a href="someurl\/$2">$1<\/a>/g

这在大多数正则表达式语言中都有效。例如,它在perl中工作(虽然我正在逃避特殊的@字符,这意味着在perl中:

#echo "some other string @[Foo Foo](contact:2) some other string @[Bar Bar](contact:1) still some other string" | perl -p -e 's/\@\[([^\]]+)\]\([^:]+:([0-9]+)\)/<a href="someurl\/$2">$1<\/a>/g' 
some other string <a href="someurl/2">Foo Foo</a> some other string <a href="someurl/1">Bar Bar</a> still some other string