【发布时间】:2013-02-14 19:44:59
【问题描述】:
所以我需要返回修改后的字符串,它在跳过 cmets 时用另一个令牌替换令牌的第一个实例。这是我所说的一个例子:
This whole quote is one big String
-- I don't want to replace this @@
But I want to replace this @@!
作为一名前 .NET 开发人员,我认为这很容易。我只会像这样消极地回顾一下:
(?<!--.*)@@
但后来我了解到 Java 无法做到这一点。所以在得知花括号没问题后,我尝试了这个:
(?<!--.{0,9001})@@
这并没有引发异常,但它确实与评论中的 @@ 匹配。
当我使用 Java 正则表达式测试器测试此正则表达式时,它按预期工作。我能想到的唯一一件事就是我使用的是 Java 1.5。 Java 1.5 的正则表达式引擎中是否有可能存在错误?假设它确实如此,我如何让 Java 1.5 做我想做的事情而不分解我的字符串并重新组装它?
编辑 我将 # 更改为 -- 运算符,因为看起来正则表达式会更复杂,使用两个字符而不是一个字符。我最初并没有透露我正在修改查询,以避免关于“你不应该那样修改查询!”的题外话讨论。我这样做是有充分理由的。请不要讨论查询修改的良好做法。谢谢
【问题讨论】:
-
所以你想替换第三个例子中的
@@而不是第二个例子? -
在 Java 正则表达式中,您不能将“有限多”长度或长度不明确的正则表达式提供给后视。某些语言甚至将其更多地限制为后视中的固定长度正则表达式。 .NET 是我所知道的唯一支持任意长度后视的。
标签: java regex regex-lookarounds