本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

正则表达式匹配组

发布于2024-12-11 17:31     阅读(921)     评论(0)     点赞(26)     收藏(5)


我对 Java 字符串的 replaceAll 函数有疑问

replaceAll("regex", "replacement");

工作正常,但每当我的“替换”字符串包含“$0”、“$1”等子字符串时,它就会通过用相应的匹配组替换这些 $x 而产生问题。

例如

input ="NAME";
input.replaceAll("NAME", "HAR$0I");

将产生字符串“HARNAMEI”,因为替换字符串包含“$0”,它将被匹配组“NAME”替换。我该如何覆盖这一性质。我只需要将结果字符串作为“HAR$0I”即可。

我转义了 $。即我将替换字符串转换为“HAR\\$0I”,效果很好。但我正在寻找 Java 中的任何方法,可以为我在正则表达式世界中具有特殊含义的所有此类字符执行此操作。


解决方案


java.lang.String.replaceAll()的文档说:

请注意,替换字符串中的反斜杠 () 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时不同;请参阅 Matcher.replaceAll。如果需要,请使用Matcher.quoteReplacement(java.lang.String)来抑制这些字符的特殊含义。

String quoteReplacement(String s)的文档指出:

返回指定字符串的文字替换字符串。此方法生成一个字符串,该字符串将用作 Matcher 类的 appendReplacement 方法中的文字替换 s。生成的字符串将与 s 中被视为文字序列的字符序列匹配。斜线 ('\') 和美元符号 ('$') 将不具有特殊含义。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/694591/4ebf9535e68cdc32e60e/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

26 0
收藏该文
已收藏

评论内容:(最多支持255个字符)