我需要为下面的字符串生成一个正则表达式。
我已经尝试了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是第二个最后一个字符(空格)
答案 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+
匹配一个或多个空白符号。
这意味着你甚至可以用空格分割字符串并抓住第二个元素,但是你可以选择正确的方法。