如何使用正则表达式操纵字符串?

时间:2012-07-26 14:56:45

标签: java regex string

我是java的新手,我正在尝试获取字符串的一部分:

说我有一个URL,我想要一个特定的部分,例如文件名:

String url = "http://example.com/filename02563.zip";

每次都会随机生成02563,现在它总是长5个字符。 我想让java找到“m /”(从.com /)到行尾的内容,以获取文件名。

现在考虑这个例子:

假设我有一个html文件,我希望从中提取一个代码段。以下是提取的示例:

<applet name=someApplet id=game width="100%" height="100%" archive=someJarFile0456799.jar  code=classInsideAJarFile.class mayscript>

我想提取jar文件名,所以我希望得到“ve =”和“.jar”之间的文本。扩展名将始终为“.jar”,因此包含此内容并不重要。

我该怎么做?如果可能的话,您能否对代码进行评论,以便了解发生了什么?

3 个答案:

答案 0 :(得分:3)

使用Java URI class,您可以访问各个元素。

URI uri = new URI("http://example.com/filename02563.zip");
String filename = uri.getPath();

当然,如果资源不再位于根路径中,则需要更多工作。

答案 1 :(得分:2)

您可以使用String类中的lastIndexOf()substring()方法提取字符串的特定部分:

String url      = "http://example.com/filename02563.zip";
String filename = url.substring(url.lastIndexOf("/") + 1); //+1 skips ahead of the '/'

答案 2 :(得分:0)

你有第一个问题的答案,所以这是第二个问题。通常我会使用一些XML解析器,但你的例子不是有效的XML文件所以这将用正则表达式解决(如你所愿)。

String url = "<applet name=someApplet id=game width=\"100%\" height=\"100%\" archive=someJarFile0456799.jar  code=classInsideAJarFile.class mayscript>";

Pattern pattern= Pattern.compile("(?<=archive=).*?(?= )");
Matcher m=pattern.matcher(url);
if(m.find())
    System.out.println(m.group());

输出:

someJarFile0456799.jar