【问题标题】:Another regex help for not matching word另一个不匹配单词的正则表达式帮助
【发布时间】:2016-07-07 06:37:48
【问题描述】:

我需要在代码中找到所有通过调用(findBy、fetchUnique..等)获取某些实体(A、B、C、D、E..)但不清除会话的方法,所以所有以 findBy、fetchUnique 开头且不清除会话的代码。

所以我有这个正则表达式如下:

\w*(A|B|C|D|E|F|G|H|I).*(?=\.findBy)((?s)(?!\.clear\())

它不起作用,欢迎任何建议。

更新:所以根据要求添加更多细节

假设我有一个方法如下:

public Long test(){
   A a = dao.findByKey(key);
   ....//use a here
   ....
   ....
   return xyz;
}

这应该匹配,因为对象 a 没有通过调用 dao.clear(a) 清除但下面的方法不应该匹配

public Long test(){
   A a = dao.findByKey(key);
   ....//use a here
   ....
   ....
   dao.clear(a);
   return xyz;
}

因为这里 a 已从会话中清除。

【问题讨论】:

  • 请向我们展示示例输入以及您想要匹配的内容。
  • 这不会修复你的正则表达式,但由于我们还不知道预期的输入/输出是什么,所以只是一个小的改进:A|B|C|D|E|F|G|H|I 可以替换为[A-I],即更短。
  • 感谢您的回复,但 A、B、C 等在这里是象征性的,不是字母表,我没有写确切的代码,它们代表实体。

标签: java regex regex-greedy


【解决方案1】:

你快到了:

\w*(A|B|C|D|E|F|G|H|I).*(?=\.findBy)(?!(?s).*\.clear\()
                                           ||<= here's the diff

demo

【讨论】:

  • 它只对一次输入的单一方法起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2011-08-29
  • 1970-01-01
  • 2011-07-14
  • 2010-10-02
  • 1970-01-01
相关资源
最近更新 更多