我正在尝试使用正则表达式截断我的 URL,例如,如果我有
http://abcdef.defgh/klmno.jsp/abdcefg
我需要阅读 url,直到http://abcdef.defgh/klmno.jsp
剩下的我需要忽略。
如果我使用
Pattern p = Pattern.compile("href=\".*");
我正在获取完整的网址,请帮助我。
虽然正则表达式当然可以满足您的要求,但这样做会更有效率:
String url = "http://abcdef.defgh/klmno.jsp/abdcefg";
String desired = url.subString( 0, url.lastIndexOf( '/' ) );
String test = "href=\"http://abcdef.defgh/klmno.jsp/abdcefg\"";
System.out.println(test);
Matcher mtch = Pattern.compile("href=\"(http://.*\\.jsp).*\"").matcher(test);
System.out.println(mtch.group(1));
会打印出来:
href="http://abcdef.defgh/klmno.jsp/abdcefg"
http://abcdef.defgh/klmno.jsp
如果您想在之后忽略所有内容,.jsp
则需要:
String foo = "http://abcdef.defgh/klmno.jsp/abdcefg";
String bar = foo.replaceAll("\\.jsp.*", ".jsp");
也就是说,取.jsp
(转义句点,\
否则它意味着“任何字符”)和.jsp
( .*
) 之后的所有内容,并将其替换为 just .jsp
。
或者,如果您只想捕获前缀为href=
then 的内容,您可以使用:
String foo = "href=\"http://abcdef.defgh/klmno.jsp/abdcefg\"";
String bar = foo.replaceAll("(href=.*\\.jsp)[^\"]*\"", "$1");
也就是说,捕获以 , 开头的所有内容href=
(.jsp
贪婪匹配将确保直到 final .jsp
),并将其用作反向引用($1
)。排除.jsp
最后报价之后的所有内容[^\"]*\"
。