字符串和符号Java之间的正则表达式

时间:2016-09-21 06:31:40

标签: java regex

我需要为下面的字符串生成一个正则表达式。

我已经尝试了rule [a-zA-Z0-9 .,/!()-+=_:$@#'&*]+\\ {,但它无效

rule apt_regin_2011_32bit_stage1 {

我需要解析apt_regin_2011_32bit_stage1 我怎么能这样做?

我在Java中遇到这个错误:

java.util.regex.PatternSyntaxException: Illegal repetition near index 36
rule [a-zA-Z0-9 .,/!()-+=_:$@#'&*]+\ {

索引36是第二个最后一个字符(空格)

1 个答案:

答案 0 :(得分:0)

你需要在模式结尾处转义{(导致非法重复错误)和角色类内的-(因此它不能形成范围并被视为文字连字符)并用括号括起字符类以定义组,然后访问组1内容。

String s = "rule apt_regin_2011_32bit_stage1 {";
Pattern pattern = Pattern.compile("rule ([a-zA-Z0-9 .,/!()\\-+=_:$@#'&*]+) \\{");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} 

请参阅Java demo

请注意,您似乎只能将您的模式与

匹配
"rule\\s+(\\S+)\\s+\\{"

请参阅正则表达式演示,其中\S+匹配一个或多个非空白符号,\s+匹配一个或多个空白符号。

这意味着你甚至可以用空格分割字符串并抓住第二个元素,但是你可以选择正确的方法。