【发布时间】:2012-05-06 14:05:41
【问题描述】:
看起来很简单的问题,但我会在这里提供任何帮助:
我需要将密码值(可以是任何值)交换为“****”
原始字符串是从 xml 中重新提取的字符串
问题是我得到的只是输出行:
<parameter><value>*****</value></parameter>
但我只需要替换密码值作为输出的整个字符串
提前谢谢你
String originalString = "<parameter>" +
"<name>password</name>"+
"<value>my123pass</value>"+
"</parameter>"+
"<parameter>"+
"<name>LoginAttempt</name>"+
"<value>1</value>"+
"</parameter>";
System.out.println("originalString: "+originalString);
Pattern pat = Pattern.compile("<name>password</name><value>.*</value>");
Matcher mat = pat.matcher(originalString);
System.out.println("NewString: ");
System.out.print(mat.replaceFirst("<value>***</value>"));
mat.reset();
【问题讨论】:
-
尝试使用正则表达式来处理 XML 通常只会让您流泪。话虽如此,您的问题是
.*是贪婪的,因此它匹配所有内容,直到您的字符串中的 last</value>。这就是为什么尝试使用正则表达式通常是个坏主意的原因之一。 -
所以在星号后面加一个问号:
.*?,看看你是否满意。这会将贪婪变成不情愿的行为。 -
您的标题具有误导性,因为它提到了换行符,并且您的问题没有涉及换行符。已编辑。
-
因为它是一个类似 String 的 XML 尝试使用像 Jdom 这样的 dom 或 sax 解析器
-
这只是正则表达式的语法。
.*匹配贪心;.*?匹配不贪心。你的问题就像在问“*如何做出贪婪的行为?” - 这只是约定/语法。
标签: java regex newline replaceall