gpt4 book ai didi

java - 如何在正则表达式的帮助下使用 replaceAll() 方法忽略字符串中的特殊字符 ($ ^ + () {} 等)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:55 24 4
gpt4 key购买 nike

我正在使用 java replaceAll() 方法用另一个 String 替换部分 String 并且它工作得很好但是,当我的文件名包含 $ ^ + ( ) { } [ ] 等字符时出现问题。在这种情况下模式匹配失败,原始字符串保持原样。展示我的用例的示例代码如下:

String messageBody = "src=\"http://thinconnect.interactcrm.com:36061/FileDownloader/4/outbound/31358/file+name.jpeg\" style=\"height:225px\"";
messageBody = messageBody.replaceAll("(http|https)://(?:[^\\s]*)/FileDownloader/4/outbound/31358/file+name.jpeg", "cid: 14890411127853");
System.out.println(messageBody);

预期的输出是:

src="cid: 14890411127853" style="height:225px"

但它给出:

src="http://thinconnect.interactcrm.com:36061/FileDownloader/4/outbound/31358/file+name.jpeg" style="height:225px"

我怎样才能通过忽略我们用来从我的文件名形成正则表达式的特殊字符来让它工作。

提前致谢!

最佳答案

您的 URL 模式中有未转义的元字符,包括加号和文字点。使用以下模式转义它们:

(http|https)://(?:[^\\s]*)/FileDownloader/4/outbound/31358/file\\+name\\.jpeg
^^^ escape dot and plus sign

完整代码:

String messageBody = "src=\"http://thinconnect.interactcrm.com:36061/FileDownloader/4/outbound/31358/file+name.jpeg\" style=\"height:225px\"";
messageBody = messageBody.replaceAll("(http|https)://(?:[^\\s]*)/FileDownloader/4/outbound/31358/file\\+name\\.jpeg", "cid: 14890411127853");
System.out.println(messageBody);

输出:

src="cid: 14890411127853" style="height:225px"

更新:

如果你事先不知道确切的模式是什么,但你知道它可能有元字符,这需要转义以用于替换,那么 Java 提供了一个方法:Pattern.quote()

要了解它是如何工作的,我们可以将您的模式分成两部分:

String part1 = "(http|https)://(?:[^\\s]*)";
String part2 = Pattern.quote("/FileDownloader/4/outbound/31358/file+name.jpeg");
messageBody = messageBody.replaceAll(part1 + part2, "cid: 14890411127853");

来自 Pattern.quote() 的文档:

This method produces a String that can be used to create a Pattern that would match the string s as if it were a literal pattern.
Metacharacters or escape sequences in the input sequence will be given no special meaning.

关于java - 如何在正则表达式的帮助下使用 replaceAll() 方法忽略字符串中的特殊字符 ($ ^ + () {} 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42896913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com