【发布时间】:2015-12-25 13:34:46
【问题描述】:
我正在尝试替换字符串中单词 true 的所有实例,
比如"<b>true</b> && 0 || 1"。
这些字符串可能包含变量值,标记为#{varname}。
我不想替换被#{ 和} 包围的实例。
示例:"<b>true</b> && #{ab_true_cd} || 0"
应转换为"<b>1</b> && #{ab_true_cd} || 0"
我尝试使用这个正则表达式:(?<!\#\{[^\}]*)true
通过使用上面的 RegEx,我得到了以下错误:
后视组在索引 13 附近没有明显的最大长度
您知道解决方案或更好的方法吗?或者有没有比使用 RegEx 更好的方法?
我使用http://regexe.com 来测试表达式。
【问题讨论】:
-
将不想替换的实例定义为“
true本身不是一个词”不是更有意义吗?我的意思是,当它独立时替换所有true,而不是当它位于单词的中间/开头/结尾时。 -
您正在寻找this。
-
Look-behind 总是应该定义最大长度。你不能使用
*,因为它的潜在长度是无限的。您可以使用{,80}(或其他比您的潜在字符串大 100% 的数字)四处走动,但这并不好。在您的情况下,您可以使用\btrue\b(\b是世界的开始或结束) -
谢谢大家的回答。 Lucas Trzesniewski 和 stribizhev 提到了我的问题的最佳解决方案。