正则表达式模式在javascript中工作但在使用PatternSyntaxException的scala中失败:未闭合的字符类

时间:2014-05-30 19:52:48

标签: regex scala

这是正则表达式:

ws(s)?://([0-9\.a-zA-Z\-_]+):([\d]+)([/([0-9\.a-zA-Z\-_]+)?

这是一个测试模式:

wss://beta5.max.com:18989/abcde.html

softlion.com喜欢它:

Test results
Match count: 1

Global matches:
wss://beta5.max.com:18989/abcde.html

Value of each capturing group:
0    1   2   3   4
wss://beta5.max.com:18989/abcde.html     s   beta5.max.com   18989   /abcde.html

scala没有:

val regex = """ws(s)?://([0-9\.a-zA-Z\-_]+):([\d]+)([/([0-9\.a-zA-Z\-_]+)?""".r


Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 58
ws(s)?://([0-9\.a-zA-Z\-_]+):([\d]+)([/([0-9\.a-zA-Z\-_]+)?

2 个答案:

答案 0 :(得分:1)

我的不好,我有一个额外的[在最后一个捕获组的前面。

(的 [ /([0-9.a-ZA-Z -_] +)?

答案 1 :(得分:1)

Java允许交叉点和所有这些,所以错误..

     ws
     ( s )?
     ://
     ( [0-9\.a-zA-Z\-_]+ )
     :
     ( [\d]+ )
=    (  <-- Unbalanced  '('
=         [  <-- Unbalanced  '['
          /
          ( [0-9\.a-zA-Z\-_]+ )?

与其他人一起没问题:

 ws
 ( s )?                             # (1)
 ://
 ( [0-9\.a-zA-Z\-_]+ )              # (2)
 :
 ( [\d]+ )                          # (3)
 ( [/([0-9\.a-zA-Z\-_]+ )?          # (4)

所以,很高兴看到(知道)原始的正则表达式并不是你想象的那样。