正则表达式求反模式

时间:2018-11-06 19:51:34

标签: java regex regex-negation regex-lookarounds

我在获取此正则表达式的另一面时遇到麻烦。

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

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

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

我只想在%19和%30不是突出显示的内容,而其他所有内容都突出显示的情况下。

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

根据您要执行的操作,您不必为(%[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);

答案 1 :(得分:1)

为了完整起见,以及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 );
   }