java - 正则表达式中的否定

标签 java regex

我希望这个正则表达式只产生字符串acl。我怎么做 ?即使我有一个否定运算符,我仍然收到 2013-

void testPattern()
     {
        Pattern pattern =
        Pattern.compile("^.*-");

        Matcher matcher =
        pattern.matcher("2013-acl");

        boolean found = false;
        while (matcher.find())
        {
            println matcher.group();

        }
      }

最佳答案

您的模式“^.*-”仅与输入匹配,直到连字符。

将其更改为“^.*-(.*)$”,并使用matcher.group(1)<代替matcher.group()/.

因此,使用此修改后的模式并使用相同的输入:

  1. ^ 匹配输入的开头
  2. 第一个 .* 匹配 2013
  3. - 匹配 -
  4. 第二个 .* 匹配 acl
  5. $ 匹配输入的结尾

第二个 .* 周围的括号构成一个捕获组。捕获的模式可以通过 matcher.group(1) 获得。

关于java - 正则表达式中的否定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15372882/

相关文章:

java - 使用库项目编译 android 项目失败,缺少 classes.jar

java - Javax Swing GUI 应用程序的单元测试问题 - 合适的 JDK 7 选项?

javascript - RegEx 中的深层嵌套组

java - 如何解析多项式的指数

大写字母的 Java 正则表达式

python - 将带有嵌入式括号的字符串转换为字典

java - 我可以在等式中使用参数吗

java - 试图获得不同的结果,说字符串不能转换为 blah.Model.Article

java - Guava ListMultimap中put()和get()操作的时间复杂度是多少?

正则表达式不匹配字符串中的双引号(只是单引号)