在groovy中使用正则表达式提取子字符串

Ric*_*doE 32 regex groovy regex-group

如果我在某些文本中有以下模式:

def articleContent =  "<![CDATA[ Hellow World ]]>"
Run Code Online (Sandbox Code Playgroud)

我想提取"Hellow World"部分,所以我使用以下代码来匹配它:

def contentRegex = "<![CDATA[ /(.)*/ ]]>"
def contentMatcher = ( articleContent =~ contentRegex )
println contentMatcher[0]
Run Code Online (Sandbox Code Playgroud)

但是我一直得到一个空指针异常,因为正则表达式似乎不起作用,什么是"任何文本和平"的正确正则表达式,以及如何从字符串中收集它?

tim*_*tes 46

尝试:

def result = (articleContent =~ /<!\[CDATA\[(.+)]]>/)[ 0 ]?[ 1 ]
Run Code Online (Sandbox Code Playgroud)

但是我担心你打算用正则表达式解析xml.如果此cdata是更大的有效xml文档的一部分,则最好使用xml解析器

  • /sf/answers/53515241/帮我解释了它. (3认同)
  • 我是Groovy的新手.你能解释为什么我们需要用"[0]"取消引用匹配器以获得一个组列表吗? (2认同)

小智 5

下面的代码显示了在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://git@github.com:jiahut/boot.git"
    def gitUrl2 = "git@github.com:jiahut/boot.git"
    println(stripSshPrefix(gitUrl))
    println(stripSshPrefix(gitUrl2))
  }
}
Run Code Online (Sandbox Code Playgroud)