Si j'ai le modèle suivant dans un texte:
def articleContent = "<![CDATA[ Hellow World ]]>"
Je voudrais extraire la partie "Hellow World", donc j'utilise le code suivant pour le faire correspondre:
def contentRegex = "<![CDATA[ /(.)*/ ]]>"
def contentMatcher = ( articleContent =~ contentRegex )
println contentMatcher[0]
Cependant, je continue à recevoir une exception de pointeur nul parce que l'expression régulière ne semble pas fonctionner, quelle serait l'expression correcte pour "toute paix de texte" et comment la collecter à partir d'une chaîne?
Essayer:
def result = (articleContent =~ /<!\[CDATA\[(.+)]]>/)[ 0 ][ 1 ]
Cependant, je crains que vous envisagiez d'analyser xml avec des expressions régulières. Si ce cdata fait partie d'un document xml valide plus grand, mieux vaut utiliser un analyseur xml
Le code ci-dessous montre l'extraction de la sous-chaîne en utilisant l'expression régulière dans 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))
}
}
Un peu tard pour la fête, mais essayez d'utiliser la barre oblique inverse pour définir votre modèle, par exemple:
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'
vous étiez sur la bonne voie, c'était juste la définition du motif qui devait être modifiée.
Les références:
https://www.regular-expressions.info/groovy.html
http://mrhaki.blogspot.com/2009/09/groovy-goodness-matchers-for-regular.html