我想逃避包含在Java性能空间所有密钥的密钥文件中加入一个\
之前他们替换所有空间属性文件
例输入
prop with spaces=value with spaces
#comment should not be replaced
prop_without_spaces=value with spaces 2
期望的输出:
prop\ with\ spaces=value with spaces
#comment should not be replaced
prop_without_spaces=value with spaces 2
我知道我可以取代所有sp与
<replaceregexp byline="true" flags="g" match="\s" replace="\\\\ " file="..."/>
尖子,但它呈现这样的结果
prop\ with\ spaces=value\ with\ spaces
#comment\ should\ not\ be\ replaced
prop_without_spaces=value\ with\ spaces\ 2
或者,我可以做这样的事情^(([^=])|(\s))*(=.*)
相匹配的各种团体,但后来如何更换所有空格,如我如何重建结果以仅包含非空格?
换句话说,考虑到上述的输入,我该怎么办下面的伪代码,在正则表达式:
- 对于不具有
#
- 对于之前的所有字符开始行第一
=
迹象 - “用(空格)” \全部替换“”(正斜杠,空间)
这有可能在正则表达式一般,而且在Java中的正则表达式特别? (最好是ANT replaceregexp
示例)
编辑:解决方案需要是RegEx表达式,不会涉及任何代码(不幸的是)。我知道如何使用代码解决这个问题:)(谢谢你的建议),但我试图去争取RegEx解决方案(因为我使用ANT,它需要编写一个自定义任务,我试图避免)。
EDIT2基于伟大的答案,这里的工作ANT版本:
使用\ G变
<replaceregexp match="(\\G[^#= ]*) " replace="\1\\\\ " byline="true"... />
使用先行有=
标志
逃离评论在他们身上
<replaceregexp match="(\s)(?=.*=)" replace="\\\\ " ... />
使用前瞻+回顾后
不逃避所有注释行(矫枉过正我认为)
<replaceregexp match="(?<!#[^=]{0,100})(\s)(?=.*=)" replace="\\\\ " ... />
它很棒。我可以接受逃脱的评论,他们有=签名,这是一个非常可读的选项。 –