猿问

正则表达式字符类

String a = "77*b+7-77/98+6";

String b[] = a.split("[*+-/]"); // works fine

b[] = a.split("[+/-  *]"); // gives pattern syntax exception because of   " * "

b[] = a.split("[*/+-]"); // works fine

b[] = a.split("[-*]"); // works fine

请帮我解决这个问题。


一只甜甜圈
浏览 118回答 1
1回答

天涯尽头无女友

在正则表达式中,方括号[]表示字符类。字符类可以包含两个字符,并用连字符分隔,a-z以表示字符范围。这意味着,如果使用连字符,并且范围的任一端均无效,则这是无效的模式。在这种情况下,必须使用\\-Java对此连字符进行转义。但是,如果在字符范围的开头或结尾使用连字符,则连字符不会被视为元字符-因为连字符不能是范围。因此您的其他模式有效,因为连字符已被有效地转义。b[] = a.split("[*/+-]"); // works fine                   ^ at the endb[] = a.split("[-*]"); // works fine                ^ at the start第一表达具有+-/,这是从有效范围+,以/在ASCII字符集,相当于文字字符+,-./。错误的表达式具有/-,即范围从/到SPACE。SPACE是性格32,/是性格,47所以您的范围是47-32,范围倒退。
随时随地看视频慕课网APP

相关分类

Java
我要回答