【问题标题】:Regex in Java: find all instances of [char1] but only if they are not preceded by [char2]Java 中的正则表达式:查找 [char1] 的所有实例,但前提是它们前面没有 [char2]
【发布时间】:2012-01-30 08:48:44
【问题描述】:

我有以下方法,如果 if 前面没有字母“x”,我希望将正则表达式分配给 split 方法以查找逗号字符 (",") 的所有实例。

方法:


public void replaceTest3() {
        String valueRaw = "onex,two,three,fourx,five";
        String[] splittedString = valueRaw.split("[(.,)]&&[^x{1}+,]");
        for (int i = 0; i < splittedString.length; i++) {
            System.out.println(splittedString[i]);
        }
}

所以我希望这个方法能够输出


onex,two
three
fourx,five

但是,正如当前的正则表达式一样,排除所有以“x”开头的逗号实例的后半部分不起作用 - 显然没有找到任何东西。我的错误在哪里,我怎样才能实现我想做的事情?

【问题讨论】:

    标签: java regex regex-negation


    【解决方案1】:

    如果不是,则查找逗号字符 (",") 的所有实例 前面有字母“x”。

    可以通过这样的负面回顾来完成:

    (?<!x),
    

    即:

    valueRaw.split("(?<!x),");
    

    【讨论】:

      【解决方案2】:

      如果您对更多代码感到满意,这是一个没有后视的解决方案:

      private static final Pattern P = Pattern.compile( "[^x],|^," );
      private static List<String> splitAtCommaNotPreceededByX( String valueRaw ) {
          Matcher m = P.matcher( valueRaw );
          List<String> parts = new ArrayList<String>();
          int start = 0;
          while(m.find()) {
              parts.add( valueRaw.substring( start, m.end() - 1 ) );
              start = m.end();
          }
          parts.add( valueRaw.substring( start ) );
          return parts;
      }
      

      【讨论】:

        【解决方案3】:

        你的角色职业是假的。特殊字符在字符类中失去了意义。例如,[(.,)]&amp;&amp;[^x{1}+,] 匹配“(&amp;&amp;+", ")&amp;&amp;{”,...

        【讨论】:

          猜你喜欢
          • 2017-12-10
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2014-11-01
          • 2013-10-27
          • 1970-01-01
          • 1970-01-01
          • 2011-07-01
          相关资源
          最近更新 更多