如何使用 IntelliJ 的结构替换 "all matches, except..."?

How to use IntelliJ's structural replacement for "all matches, except..."?

假设我想用 print(wrapper(x)) 替换 print(x)。我可以匹配

print($Argument$)

并将其替换为

print(wrapper($Argument$))

但是,如果我已经调用了 print(wrapper(x)),我不想将其替换为 print(wrapper(wrapper(x)))。我怎样才能避免这种情况?也就是说,"do the replacement, unless the arguments match some pattern"怎么说?

你会:

  1. 输入搜索模板(举例):System.out.println($args$)
  2. 点击Edit Variables
  3. 选择 $args$ 变量
  4. Text constraints -> Text/regexp下输入^wrapper\(.*\)$并勾选Invert condition

显然,您可以根据需要调整正则表达式。反转条件意味着搜索将跳过满足条件的所有实例。基本上你写一个正则表达式来匹配你不想看到的东西,Invert condition 是一个 NOT 运算符。

关于我的测试文本:

System.out.println( ex.getMessage() );
System.out.println( wrapper( ex.getMessage() ) );

第二个实例不在搜索结果中。