在Java中使用正则表达式解析String
是否有一个简单的解决方案?
我必须调整HTML页面。因此,我必须解析几个字符串,例如:
href="/browse/PJBUGS-911"
=>
href="PJBUGS-911.html"
字符串的模式仅对应于ID(例如911
)。我的第一个想法是这样的:
String input = "";
String output = input.replaceAll("href=\"/browse/PJBUGS\\-[0-9]*\"", "href=\"PJBUGS-???.html\"");
我想替换ID以外的所有内容。我怎么能这样做?
如果有人可以帮助我会很好:)
答案 0 :(得分:3)
您可以使用括号capture与您的模式匹配的子字符串。然后,您可以使用$n
替换中使用捕获的内容,其中n
是括号集的编号(从左到右计算左括号)。以你的例子:
String output = input.replaceAll("href=\"/browse/PJBUGS-([0-9]*)\"", "href=\"PJBUGS-$1.html\"");
或者如果你想:
String output = input.replaceAll("href=\"/browse/(PJBUGS-[0-9]*)\"", "href=\"$1.html\"");
答案 1 :(得分:1)
这不使用正则表达式。但也许它仍然可以解决你的问题。
output = "href=\"" + input.substring(input.lastIndexOf("/")) + ".html\"";
答案 2 :(得分:0)
我就是这样做的:
public static void main(String[] args)
{
String text = "href=\"/browse/PJBUGS-911\" blahblah href=\"/browse/PJBUGS-111\" " +
"blahblah href=\"/browse/PJBUGS-34234\"";
Pattern ptrn = Pattern.compile("href=\"/browse/(PJBUGS-[0-9]+?)\"");
Matcher mtchr = ptrn.matcher(text);
while(mtchr.find())
{
String match = mtchr.group(0);
String insMatch = mtchr.group(1);
String repl = match.replaceFirst(match, "href=\"" + insMatch + ".html\"");
System.out.println("orig = <" + match + "> repl = <" + repl + ">");
}
}
这只是显示正则表达式和替换,而不是最终格式化的文本,您可以使用Matcher.replaceAll
获得:
String allRepl = mtchr.replaceAll("href=\"$1.html\"");
如果只是对替换所有内容感兴趣,则不需要循环 - 我只是用它来调试/显示正则表达式如何开展业务。