如何从Java中的String中提取Substring

时间:2012-01-23 23:24:25

标签: java regex

我有一个如下字符串:

<script language="JavaScript" type="text/javascript" src="http://dns.net/adj/myhost.com/index;size=5x10;zipc=12345;myzon=north_west;|en;tile=10;ord=7jkllk456?"></script>

我想访问src="">之间的任何内容。我开发了类似下面的代码:

        int i=str.indexOf("src=\"");
        str=str.substring(i+5);
        i=str.indexOf("\">");
        str=str.substring(0,i);
        System.out.println(str);

你知道这是不是正确的方法吗?我唯一担心的是,src=之间或">之间的空格有时会有空格,在这种情况下,我的代码无效,所以我在思考使用正则表达式。但我无法想出任何正则表达式。你有什么建议吗?

5 个答案:

答案 0 :(得分:2)

这样可行,但您应该查看Regular Expressions,它们提供了一种强大的方式来发现模式并相应地提取文本。

答案 1 :(得分:1)

也许这对你的情况来说太过分了,但你可能想考虑使用HTML解析器。这将解决所有文档格式问题,并让您以标准方式获取标记和属性。虽然Regex可能适用于简单的HTML,但一旦事情变得更复杂,您可能会遇到麻烦(错误匹配或错过匹配)。

以下是Java的可用开源解析器列表:http://java-source.net/open-source/html-parsers

答案 2 :(得分:1)

您也可以尝试此正则表达式src\s+"[=](.*)"\s+>

让我们分解

src匹配字符串

中的src

\s+查找一个或多个空格

[=]匹配等于

(.*)"\s>

之前出现零个或多个文本

答案 3 :(得分:1)

如果您不想打扰正则表达式,可以这样做:

testString.split("src\\=")[1].split(">")[0]);

当然它仍然无法解决您使用不同格式的其他问题,但您仍然可以使用String.split()而不是您使用的5行代码使用适用的正则表达式(如RanRag的答案)。 / p>

答案 4 :(得分:0)

如果您想要的字符串中没有任何转义双引号,请尝试使用以下表达式:src="([^"]*)"。这将src="并匹配任何内容,直到后面的第一个",并将双引号之间的文本捕获到组1中(组0始终是整个匹配的字符串)。

由于允许=周围的空格,您可以将表达式扩展为src\s*=\s*"([^"]*)"

只是警告:HTML不是常规语言,因此无法使用正则表达式进行解析。对于像这样的简单情况,它是可以的,但不要陷入陷阱,并认为你可以解析更复杂的html结构。

相关问题