Java:查找文档中的任何字符串
我在正则表达式方面非常糟糕,所以我希望你能帮助我: 我编写了一个类,它可以打开一个Java:查找文档中的任何字符串,java,regex,Java,Regex,我在正则表达式方面非常糟糕,所以我希望你能帮助我: 我编写了一个类,它可以打开一个odf文档,搜索一些给定的关键字(hashmap中的关键字),并用其他odf文件的内容(hashmap的值)替换这些关键字。到目前为止,该类已完成,只缺少正则表达式部分。如果键只是像“FILE”或“REPLACETHIS”这样的字符串,那么一切都可以工作。 但是我还需要能够替换字符串,比如“{File_1}}”、“”、“!replace this!”等等。这些字符串可以由用户选择,因此可能性是无穷的。 这些字符串也
odf
文档,搜索一些给定的关键字(hashmap
中的关键字),并用其他odf文件的内容(hashmap的值)替换这些关键字。到目前为止,该类已完成,只缺少正则表达式部分。如果键只是像“FILE”或“REPLACETHIS”这样的字符串,那么一切都可以工作。
但是我还需要能够替换字符串,比如“{File_1}}”、“”、“!replace this!”等等。这些字符串可以由用户选择,因此可能性是无穷的。
这些字符串也可以是其他字符串的一部分,例如:“this is so[替换此]me text”
我希望你理解我的想法,这是可能的
-e-
是的,我必须使用正则表达式,因为我正在使用的库需要一个模式。编译对象据我所知(如果我错了,请随时纠正我)。您的主要问题是具有特殊正则表达式含义的字符。为什么不在编译模式之前转义这些字符呢
myPattern = "some user defined word with { strange characters";
myPattern = myPattern.replaceAll( "\\{", "\\{" );
myPattern = myPattern.replaceAll( "\\}", "\\}" );
myPattern = myPattern.replaceAll( "\\.", "\\." );
...
Pattern regex = Pattern.compile( myPattern );
IMHO,做我认为你想做的事情的最短方法是(你在帖子下面的评论中确认了这一点):
这样,字符将失去其特殊的正则表达式含义,用户可以输入他们想要的任何内容
请阅读中有关这些方法的更多信息。我对正则表达式非常不擅长,我和其他许多人也是如此,但请向我们展示您迄今为止的尝试。我想您将尝试(1)制作密钥正则表达式模式,并在搜索中应用到文档。(2) 使hashmap值为regex并应用regex替换。一路上,你会更好地使用正则表达式。没有捷径可以让你轻松地使用正则表达式来完成这项工作。但是,不要觉得你必须一下子精通正则表达式,而是开始尝试,逐步提高你的舒适度。好吧,我明白了。事实上,我对正则表达式一无所知,但我真的很愿意在我学习完RoR之后马上学习它。为什么不使用Pattern Pattern=Pattern.compile(Patern.quote(yourstringtobereplace))代码>?如果您发现@jlordo中的所有信息都是正确的,您将获得用户输入,然后将其放入他给您的代码中。有什么问题吗?如果有现成的方法,比如使用\Q…。\E或jlordo指出的patren.quote(YourStringToBereplace)
:)我必须承认我不熟悉这些特殊类。谢谢你的观点。你在发帖前试过吗?你的替换根本不会改变字符串。你需要myPattern.replaceAll(“\\{”,“\\\{”)
才能得到你想要的。这就是为什么Pattern.quote()
容易得多的原因。replaceAll()
的JavaDoc说:注意反斜杠(\)和美元符号($)在替换字符串中,如果将其视为文字替换字符串,则可能会导致结果不同;请参阅Matcher.replaceAll。如果需要,请使用Matcher.quoteReplacement(java.lang.string)来抑制这些字符的特殊含义。
Pattern pattern = Pattern.compile(Pattern.quote(yourStringToBeReplaced));