【问题标题】:Java Regexp MatcherJava 正则表达式匹配器
【发布时间】:2012-05-20 12:19:48
【问题描述】:

关于正则表达式的简单问题。 我有

String text = "foobar1foobar1";

而且我需要在前 1 之前获得一部分 (foobar) 当我做这样的事情时:

Pattern date_pattern = Pattern.compile("(.+)1");
Matcher matcher = date_pattern.matcher(text);
matcher.group(1);

但我收到“foobar1foobar”。

【问题讨论】:

    标签: java regex matcher


    【解决方案1】:

    + 量词是贪婪的,所以它尽可能匹配。你应该这个量词+?reluctant version;然后你的模式变成:

    (.+?)1
    

    【讨论】:

      【解决方案2】:

      贪婪和非贪婪的正则表达式。 .+ 是贪婪的,会进行尽可能长的匹配。添加? 将使其不贪婪:.+?

      对于您的示例,您实际上并不需要正则表达式,但我想这只是一个示例。 相反,您可以使用您的示例执行此操作:

      String firstPart = text.substring(0, text.indexOf('1'))
      

      甚至是拆分中的(非常简单的)正则表达式:

      String firstPart = text.split("1")[0]
      

      对于大多数人来说,两者都比正则表达式更容易阅读。但是,如果您没有“1”,请小心。

      【讨论】:

        【解决方案3】:

        另一种方法可能是使用拆分功能:

        String s="foobar1foobar2";
        String[] splitted = s.split("1");
        

        您要搜索的字符串在 splitted[0] 中。

        【讨论】:

          猜你喜欢
          • 2011-01-24
          • 2015-09-02
          • 1970-01-01
          • 2011-03-30
          • 2011-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多