正则表达式否定模式

Regex Negate Pattern

我无法获取此正则表达式的另一面。

Stranger Number is %19. Friend Number is %30. 

我当前的正则表达式是这样的 (%[0-9]+) 所以当我 运行 这个正则表达式。唯一突出显示的是 %30%19.

Strange Number is %19. Friend Number is %30. 

我只想反过来,其中 %19 和 %30 不是突出显示的,而其他所有内容都突出显示。

我试过了。这个 [^%](?![0-9]) 但我没有得到我预期的输出。

感谢您的帮助!

取决于你想做什么,你不必为 (%[0-9]+).

找到倒置的正则表达式

例如,如果您计划提取所有与倒置正则表达式匹配的子字符串,您可以使用 yourString.split("%[0-9]+").

如果您计划通过使用 yourString.split(invertedRegex) 拆分字符串来提取所有 %...,您可以改用匹配器。
代码取自 this answer.

String[] matches = Pattern.compile("%[0-9]+").matcher(yourString)
                          .results().map(MatchResult::group)
                          .toArray(String[]::new);

为了完整性,以及 Java 早期版本的完整性,您可以只使用 Matcherwhile 循环来提取与模式匹配的字符串。

   public static void main( String[] args ) {
      String test = "Number %1.  And number %2 also.";
      Matcher matcher = Pattern.compile( "%[\d]+" ).matcher( test );
      ArrayList<String> results = new ArrayList<>();
      while( matcher.find() )
         results.add( matcher.group() );
      System.out.println( results );
   }