使用JavaString.replaceFirst替换包含特殊regex字符的字符串

qrjkbowd  于 2023-03-31  发布在  Java
关注(0)|答案(2)|浏览(144)

为了将一个HTML源代码的字符串拆分成它的部分,我写了一个方法,它获取字符串的下一个所需部分,将其复制到字符串列表中,然后删除字符串中的出现。为了删除,我使用text.replaceFirst(s, "")
不幸的是,提供的HTML-Code包含regex meta字符,如'|',结果只删除了我已经复制的字符的一部分。
我真的不想尝试在所有可能有问题的符号前面加上一个反斜杠来转义,因为这是一项乏味的工作,而且容易出错。
有没有可能只替换一个字符串在另一个字符串中的第一次出现,而不必担心这样的字符?
示例:

String input = "<title>text | more</title>";
String[] expected = ["<title>", "text | more", "</title>"];

我为〉拆分,因此得到"<title>",将其添加到我的结果列表中并调用input.replaceFirst("<title>", "");,将输入保留为"text | more</title>"
我为〈拆分,因此得到"text | more",将其添加到结果列表中并调用input.replaceFirst("text | more", ""),将输入保留为"| more</title>",但我希望输入为"</title>"

wydwbb8l

wydwbb8l1#

可以使用Pattern.quote()方法转义字符串中的所有正则表达式 meta字符

String input = "<title>text | more</title>";
String[] expected = {"<title>", "text | more", "</title>"};

String[] parts = input.split(Pattern.quote(">"));

for (String part : parts) {
    input = input.replaceFirst(Pattern.quote(part), "");
}

System.out.println(Arrays.toString(parts));
0yg35tkg

0yg35tkg2#

不需要替换,可以直接拆分为<>的查找。

String[] res = input.split("(?<=>)|(?=<)");
// [<title>, text | more, </title>]

但是,应该注意正则表达式不是解析HTML的最佳工具,可以考虑使用XML解析器。

相关问题