正则表达式字符类

时间:2018-06-24 09:22:29

标签: java split

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

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:3)

在正则表达式中,方括号[]表示character class。字符类可以包含两个字符,并用连字符a-z隔开,以表示字符的范围

这意味着如果使用连字符,并且范围的任一端均无效,则这是无效的模式。在这种情况下,必须使用Java中的\\-来转义此连字符。

但是,如果在字符范围的开始 end 处使用连字符,则连字符不会被视为元字符-因为它不能是范围。因此,您的其他模式也可以使用,因为连字符可以有效地转义。

b[] = a.split("[*/+-]"); // works fine
                   ^ at the end
b[] = a.split("[-*]"); // works fine
                ^ at the start

第一个表达式具有+-/,这是ASCII character set中从+/的有效范围,等效于文字字符+,-./。 / p>

错误的表达式具有/-,即从/SPACE的范围。 SPACE是字符32,而/是字符47,因此您的范围是47-32,范围是向后