我有一些字符串如下:
it.mycompany.db.beans.str1.PD_T_CLASS
it.mycompany.db.beans.join.PD_T_CLASS
it.mycompany.db.beans.str2.PD_T_CLASS_1
it.mycompany.db.beans.join.PD_T_CLASS_1
PD_T_CLASS myVar = new PD_T_CLASS();
myVar.setPD_T_CLASS(something);
我想选择“PD_”部分用“”替换它(空字符串)但只有整行不包含字符串“.join。”
我想要实现的目标是:
it.mycompany.db.beans.str1.T_CLASS
it.mycompany.db.beans.join.PD_T_CLASS
it.mycompany.db.beans.str2.T_CLASS_1
it.mycompany.db.beans.join.PD_T_CLASS_1
T_CLASS myVar = new T_CLASS();
myVar.setT_CLASS(something);
替换不是问题,因为我使用的是eclipse搜索工具,只要它显示正确的结果就会点击替换。
我试过了:
^((?!\.join\.).)*(PD_)*$ // whole string selected
^((?!\.join\.).)*(\bPD_\b)*$ // whole string selected
我开始感到沮丧,因为我搜索了一下(^((?!join bla bla来自那些搜索)
你能帮助我吗?
答案 0 :(得分:3)
您可以使用以下正则表达式:
(?m)(?:\G(?!\A)|^(?!.*\.join\.))(.*?)PD_
并替换为
$1
请参阅regex demo
<强>详情:
(?m)
- 一个Pattern.MULTILINE
内联修饰符标志,用于强制^
匹配行的开头而不是整个字符串(?:\G(?!\A)|^(?!.*\.join\.))
- 两种选择中的任何一种:
\G(?!\A)
- 上一次成功比赛的结束|
- 或^(?!.*\.join\.)
- 在其中没有.join.
文字的行的开头(因为(?!.*\.join\.)
是一个否定前瞻,如果匹配任何0 +以外的字符,则匹配将失败换行符(.*
)然后.join.
)(.*?)
- 捕获组#1(在替换模式中引用$1
反向引用):除了换行符之外的任何0+字符,尽可能少,直到第一次出现... PD_
- 文字PD_
替换是第一个捕获组的$1
反向引用,它将恢复PD_
之前匹配的任何文本。