【问题标题】:Regular expression between a string and symbol Java字符串和符号Java之间的正则表达式
【发布时间】:2017-01-29 06:11:17
【问题描述】:

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

我尝试过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 是倒数第二个字符(空格)

【问题讨论】:

  • 您可能需要转义 / 字符。
  • 您需要将末尾的{ 转义并用括号将字符类括起来,然后访问Group 1 的内容。

标签: java regex


【解决方案1】:

您需要转义模式末尾的{(这会导致非法重复错误)和字符类中的-(这样它就不能形成一个range 并被视为文字连字符)并用括号将字符类括起来以定义一个组,然后访问第 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+ 匹配一个或多个空白符号。

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

【讨论】:

  • 谢谢!这就是我需要的
猜你喜欢
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2020-10-19
相关资源
最近更新 更多