Groovy String замена - PullRequest
       7

Groovy String замена

7 голосов
/ 04 февраля 2012

У меня есть строка в следующем формате

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

, поэтому в основном нужно заменить @[Some name](contact:id) на URL, используя groovy и используя reg ex whatэффективный способ сделать это

Ответы [ 2 ]

11 голосов
/ 04 февраля 2012

Вы можете использовать метод 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 голос
/ 04 февраля 2012

Вы не упоминаете язык программирования, но, в общем, предполагаете, что язык каким-то образом использует синтаксис /// типа 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...