【问题标题】:Regex:Match and Replace a pattern from string while keeping a part of matched string in the replaced string正则表达式:匹配并替换字符串中的模式,同时将匹配字符串的一部分保留在替换的字符串中
【发布时间】:2012-10-13 05:20:12
【问题描述】:
我有一个类似
的字符串
@jhon.p @[User:151|Jhon Carter] Jhon Carter @sunil.p @[User:102|Sunil Nadar] Sunil Nadar
我想将 javascript 或 Java 中的正则表达式应用于上述字符串以获取输出
@jhon.p <a href="#/users/151">Jhon Carter</a> @sunil.p <a href="#/users/102">Sunil Nadar</a>
知道我该怎么做吗?
【问题讨论】:
标签:
java
javascript
regex
【解决方案1】:
你可以使用这个正则表达式来匹配
@\[User:(\d+)\|(.*?)\]\s*\2
然后您可以使用它来替换 $1 $2 引用组的位置。
<a href="#/users/$1">$2</a>
【解决方案2】:
这是将为您完成这项工作的 Java 代码:
String str =
"@jhon.p @[User:151|Jhon Carter] Jhon Carter @sunil.p @[User:102|Sunil Nadar] Sunil Nadar";
Matcher m = Pattern.compile("@\\[User:(\\d+)\\|([^]]+)\\]\\s+\\2").matcher(str);
StringBuffer buf = new StringBuffer();
while (m.find()) {
String link = "<a href=\"#/users/" + m.group(1) + "\">" + m.group(2) + "</a>";
m.appendReplacement(buf, link);
}
m.appendTail(buf);
System.out.printf("Converted String is: %s%n", buf);
输出:
Converted String is: @jhon.p <a href="#/users/151">Jhon Carter</a> @sunil.p <a href="#/users/102">Sunil Nadar</a>