Groovy syntax for regular expression matching

前端 未结 3 1062
终归单人心
终归单人心 2020-12-24 01:07

What is the Groovy equivalent of the following Perl code?

my $txt = \"abc : groovy : def\";
if ($txt =~ / : (.+?) : /) {
  my $match = $1;
  print \"MATCH=$m         


        
相关标签:
3条回答
  • 2020-12-24 01:22

    m[0] is the first match object.
    m[0][0] is everything that matched in this match.
    m[0][1] is the first capture in this match.
    m[0][2] is the second capture in this match.

    Based on what I have read (I don't program in Groovy or have a copy handy), given

    def m = "barbaz" =~ /(ba)([rz])/;
    

    m[0][0] will be "bar"
    m[0][1] will be "ba"
    m[0][2] will be "r"
    m[1][0] will be "baz"
    m[1][1] will be "ba"
    m[1][2] will be "z"

    I could not stand not knowing if I was correct or not, so I downloaded groovy and wrote an example:

    def m = "barbaz" =~ /(ba)([rz])/;
    
    println "m[0][0] " + m[0][0]
    println "m[0][1] " + m[0][1]
    println "m[0][2] " + m[0][2]
    println "m[1][0] " + m[1][0]
    println "m[1][1] " + m[1][1]
    println "m[1][2] " + m[1][2]
    
    0 讨论(0)
  • 2020-12-24 01:38

    This is my best understanding of how to do this using Groovy syntax (but see lfaraone's response too):

    import java.util.regex.Matcher
    
    def txt = 'abc : groovy : def'
    if (txt =~ ~/ : (.+?) : /) {
        def match = Matcher.lastMatcher[0][1]
        println "MATCH=$match"
    }
    
    0 讨论(0)
  • 2020-12-24 01:42

    This was the closest match to the Perl code that I could achieve:

    def txt = "abc : groovy : def"
    if ((m = txt =~ / : (.+?) : /)) {
      def match = m.group(1)
      println "MATCH=$match"
    }
    
    0 讨论(0)
提交回复
热议问题