【问题标题】:Regex pattern starting with a String and ending with ')' with multiple occurances正则表达式模式以字符串开头并以 ')' 结尾并多次出现
【发布时间】:2015-11-07 17:13:43
【问题描述】:

请向我推荐正则表达式模式:

字符串:

这是文本)做正则表达式测试。错误原因:错误模式 (com.test.Validator.java:32) 更多文本错误原因:错误模式 (com.test.Validator2.java:65) 更多文本

需要提取:

原因:错误模式(com.test.Validator.java:32)原因:错误模式(com.test.Validator2.java:65)

正则表达式模式使用:

引起:(.?)([^)])

问题:

  1. 只给我第一次出现。
  2. ')' 被排除在外

【问题讨论】:

  • #1 与使用正则表达式而不是正则表达式本身的代码相关 - 您需要向我们展示该代码以帮助我们解决此问题(尽管,为了使其对未来的访问者有用,这可能最好作为单独的问题提出,但我敢肯定在某处存在重复的问题,例如 this)。

标签: regex pattern-matching


【解决方案1】:

你可以使用这个正则表达式:

Caused by:[^)]+\)

请注意,对于多个 macthe,您需要 g 修饰符。

Online demo

Java 中,您需要一个额外的反斜杠:

Caused by:[^)]+\\)

此正则表达式匹配 Caused by 后跟正数字符() 除外)后跟 )

【讨论】:

  • 谢谢....效果很好。但是如何获取字符串中的所有事件呢?我正在使用 Java
  • @saptarshi 你想要 one 字符串中的所有匹配项吗?
  • 感谢@Sven .....我已经使用 Java 搜索了所有其他的事件......谢谢你的帮助......
  • 需要其他帮助.....如何提取字符串直到 ')' 以 'Caused *:' 开头,不包括 'Caused *:'
  • @saptarshi 你可以试试这个正则表达式:(?<=Caused by: )[^)]+\\)
【解决方案2】:

对于Java,您可以使用下一个:

Pattern p = Pattern.compile("Caused by: [^)]+\\)");
        Matcher m = p.matcher("Caused by: faulty pattern (com.test.Validator.java:32) and Caused by: faulty pattern (com.test.Validator2.java:65)");
        while(m.find()){
            System.out.println(m.group());
        }

【讨论】:

    【解决方案3】:

    做出比你总是想匹配第一个右括号的假设。

    Caused by:.*?\)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 2017-09-17
      相关资源
      最近更新 更多