我正试图找到一个说:
的模式只有数字a-z A-Z 0-9。 + - %
错了,是我的代码:
String regex = "[^a-zA-Z0-9_\\.+-\\%]";
我得到例外 指数17附近的非法字符范围 在17指数我有%,我做错了什么?
答案 0 :(得分:4)
您不需要在正则表达式中转义%
。删除之前的\
。
你也不应该逃避.
。在字符类中没有必要这样做:在字符类中,它表示文字.
字符,而不是"任何字符"。
但你做需要逃避-
,你的意思是文字-
,而不是字符范围。
String regex = "[^a-zA-Z0-9_.+\\-%]";
答案 1 :(得分:1)
我得到异常非法字符范围
这是因为在字符类中间存在未转义的连字符作为范围。你可以在字符类的第一个或最后一个位置放置未转义的连字符,否则你需要将其转义。
您可以使用此正则表达式:
String regex = "[^a-zA-Z0-9_.+%-]";
或:
String regex = "[^\\w.+%-]";
无需在角色类中转义DOT或%
。