我对正则表达式非常不好,所以我希望你能帮助我:
我写过一个可以打开odf
文档的类,搜索某个keywords
(keys
中的hashmap
)和替换< / em>这些关键字的内容为其他odf-files
(hashmap的值)。到目前为止,该类已完成,只缺少正则表达式部分。如果键只是“FILE”或“REPLACETHIS”之类的字符串,则一切正常。
但我还需要能够替换像“{{File_1}}”,“”,“!替换这个!”这样的字符串!等等。这些字符串可以由用户选择,因此可能性是无穷无尽的。
这些字符串也可以是其他字符串的一部分,例如:“这就是[替换此]我的文本”。
我希望你明白我的魔杖,这甚至是可能的。
-E- 是的,我必须使用正则表达式,因为我正在使用的库需要一个Pattern.compile对象
答案 0 :(得分:2)
恕我直言,做我认为你想做的最短路的是(你在帖子下方的评论中证实了这一点):
Pattern pattern = Pattern.compile(Pattern.quote(yourStringToBeReplaced));
这样,字符将丢失其特殊的正则表达式含义,用户可以输入他们想要的任何内容。
在JavaDoc中详细了解这些方法。
答案 1 :(得分:-1)
据我了解(如果我错了,请随时纠正我)你的主要问题是具有特殊正则表达式的字符。为什么不在编译模式之前逃避这些字符?
myPattern = "some user defined word with { strange characters";
myPattern = myPattern.replaceAll( "\\{", "\\{" );
myPattern = myPattern.replaceAll( "\\}", "\\}" );
myPattern = myPattern.replaceAll( "\\.", "\\." );
...
Pattern regex = Pattern.compile( myPattern );