代码之家  ›  专栏  ›  技术社区  ›  oluies

scala regex命名为捕获组

  •  16
  • oluies  · 技术社区  · 14 年前

    scala.util.matching.regex trait matchdata i see that there support for groupnames,i thought that this was related to( regex named capturinG组

    < < HREF= =“http://StaskObjult/COM/Quase/415580/ReX在Java中命名组”之前,Java不支持版本7 < /A>,如我理解的(“HREF=”http://Boopgs.Oracle .COM/XeMeMeNe/Engy/NAMEDID-CAPUTURGIN GROPUPNIN JDK7“REL=”NoFoLoLoReFEER“>REF ”, Scala版本2.8.(Java热点(TM)64位服务器VM,Java)1.6. 给我这个例外:

    scala>val pattern=“”(?<login>\w+)(?<id>\d+)“”。.r
    java.util.regex.patternSyntaxException:查找组没有obvio
    美国最大长度接近索引11
    ?<login>\w+)(?I& Gt;\D+)
    ^
    在Java.UTI.ReEX.St.Error(模式:Java:1713)
    在Java.UTI.ReEX.FET.GROP0(模式:Java:2488)
    在Java.UTI.ReEX.Studio。序列(模式:Java:1806)
    在Java.UTI.ReEX.Type .EXPR(模式:Java:1752)
    在Java.UTI.ReEX.Studio中编译(模式:Java:1460)
    < /代码> 
    
    

    那么,问题是scala中支持的捕获组的命名?如果有的话,有什么例子吗?Regex Named Capturing Groups)

    但自从Java does not support groupnames until version 7据我所知(ref)Scala版本2.0.0(Java热点(TM)64位服务器VM,Java 1.6)。给了我这个例外:

    scala> val pattern = """(?<login>\w+) (?<id>\d+)""".r
    java.util.regex.PatternSyntaxException: Look-behind group does not have an obvio
    us maximum length near index 11
    (?<login>\w+) (?<id>\d+)
               ^
            at java.util.regex.Pattern.error(Pattern.java:1713)
            at java.util.regex.Pattern.group0(Pattern.java:2488)
            at java.util.regex.Pattern.sequence(Pattern.java:1806)
            at java.util.regex.Pattern.expr(Pattern.java:1752)
            at java.util.regex.Pattern.compile(Pattern.java:1460)
    

    那么问题是,scala中支持的捕获组的命名?如果有的话,有什么例子吗?

    2 回复  |  直到 12 年前
        1
  •  25
  •   polygenelubricants    14 年前

    恐怕scala的命名组定义方式不同。它只是原始模式中未命名(即刚刚编号)组的后处理别名。

    下面是一个例子:

    import scala.util.matching.Regex
    
    object Main {
       def main(args: Array[String]) {
          val pattern = new Regex("""(\w*) (\w*)""", "firstName", "lastName");
          val result = pattern.findFirstMatchIn("James Bond").get;
          println(result.group("lastName") + ", " + result.group("firstName"));
       }
    }
    

    这张照片( as seen on ideone.com ):

    Bond, James
    

    这里发生的是在 Regex ,我们提供组1、组2等的别名,然后我们可以用这些名称引用这些组。这些名称不是模式本身固有的。

        2
  •  2
  •   Randall Schulz    14 年前

    scala没有自己的正则表达式匹配元素。相反,底层正则表达式是Java的,所以编写模式的细节是在JavaUTI.ReExx.Cub中记录的模式。

    在这里,您将发现您使用的语法实际上是look-behind约束的语法,不过根据文档 < 后面必须跟 = (正面看后面)或 ! (消极地看后面)。

    推荐文章