Java正则表达式匹配,如果不被#{.*和.*}包围
我试图替换字符串中单词true的所有实例,
比如在"true && 0 || 1"
中
这些字符串可能包含变量值,标记为#{varname}
。
我不想替换被#{
和}
包围的实例
示例:
"true && #{ab_true_cd} || 0"
应转换为
"1 && #{ab_true_cd} || 0"
我尝试使用这个正则表达式:
(?<!\#\{[^\}]*)true
通过使用上面的正则表达式,我得到了以下错误:
在指数13附近,“回头看”组并没有明显的最大长度
您知道解决方案或更好的方法吗?还是有比使用正则表达式更好的方法
我使用http://regexe.com测试表达式
# 1 楼答案
你可以用“&&;'或“||”,将每个部分与单词“true”进行比较,替换为“1”,然后再次合并它们
# 2 楼答案
下面是两个使用正则表达式的解决方案(都在Lucas Trzesniewski和TEXHIK的评论中提到):
Java代码:
参见demo(输出:
1 && #{ab_true_cd} || 0
)正则表达式
(?<!#\\{[^{}]{0,500})\\btrue\\b
匹配任何一个完整单词true
,该单词前面没有#{
后跟0或最多500个字符,而不是{
或}
代码:
见another IDEONE demo