使用正则表达式替换每个没有前缀的后缀

Replace each suffix not preceded by prefix using regexp

我需要将所有后缀 "SJD" 替换为前缀 "/" 到 [=25] 的正则表达式=]"OZPS"(并且它必须与 ant builder 一起使用)。

我从 xml 文件中删除了几行示例:

输入:

<replaceregexp flags="g" match="SJD" replace="OZPS" file="../ozps/build.xml"/>
<replaceregexp flags='g' match='"\/CAS\/SJD"' replace='"/CAS/OZPS"'>
<replaceregexp flags="g" match="SJD" replace="OZPS">

预期输出:

<replaceregexp flags="g" match="OZPS" replace="OZPS" file="../ozps/build.xml"/>
<replaceregexp flags='g' match='"\/CAS\/SJD"' replace='"/CAS/OZPS"'>
<replaceregexp flags="g" match="OZPS" replace="OZPS">

我试过否定后视断言,但它似乎不起作用。

编辑: 对每个使用在线正则表达式测试器的人的简短解释。由于 java 脚本正则表达式引擎,它们中的大多数不支持否定后向断言。与 JS 不同,java 引擎似乎支持 NLA 所以如果你测试表达式的专用 java 我建议使用这个 https://regex101.com

您可以这样尝试:(?<!\/)SJD.

有可用示例 here

编辑:查看 this 问题,您似乎可以这样做:

<replaceregex pattern="(?&lt;!\/)SJD" replace="OZPS"
    flags="gis" byline="false"/>

编辑:根据@Piotr 的建议,< 将需要替换为 &lt; 以将其从 XML 文件的其余部分转义。