テキストに次のパターンがある場合:
def articleContent = "<![CDATA[ Hellow World ]]>"
「Hellow World」部分を抽出したいので、次のコードを使用して一致させます。
def contentRegex = "<![CDATA[ /(.)*/ ]]>"
def contentMatcher = ( articleContent =~ contentRegex )
println contentMatcher[0]
しかし、正規表現が機能していないように見えるので、nullポインタ例外を取得し続けます。「テキストの平和」の正しい正規表現は何でしょうか。
試してください:
def result = (articleContent =~ /<!\[CDATA\[(.+)]]>/)[ 0 ][ 1 ]
ただし、XMLを正規表現で解析する予定があるのではないかと心配しています。このcdataがより大きな有効なxmlドキュメントの一部である場合、xmlパーサーを使用する方が良い
以下のコードは、groovyで正規表現を使用した部分文字列抽出を示しています。
class StringHelper {
@NonCPS
static String stripSshPrefix(String gitUrl){
def match = (gitUrl =~ /ssh:\/\/(.+)/)
if (match.find()) {
return match.group(1)
}
return gitUrl
}
static void main(String... args) {
def gitUrl = "ssh://[email protected]:jiahut/boot.git"
def gitUrl2 = "[email protected]:jiahut/boot.git"
println(stripSshPrefix(gitUrl))
println(stripSshPrefix(gitUrl2))
}
}
パーティーに少し遅れましたが、パターンを定義するときにバックスラッシュを使用してみてください、例:
def articleContent = "real groovy"
def matches = (articleContent =~ /gr\w{4}/) //grabs 'gr' and its following 4 chars
def firstmatch = matches[0] //firstmatch would be 'groovy'
あなたは正しい軌道に乗っていたので、変更する必要があるのはパターン定義だけでした。
参照:
https://www.regular-expressions.info/groovy.html
http://mrhaki.blogspot.com/2009/09/groovy-goodness-matchers-for-regular.html