我有一个如下字符串:
<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
和=
之间或"
和>
之间的空格有时会有空格,在这种情况下,我的代码无效,所以我在思考使用正则表达式。但我无法想出任何正则表达式。你有什么建议吗?
答案 0 :(得分:2)
这样可行,但您应该查看Regular Expressions,它们提供了一种强大的方式来发现模式并相应地提取文本。
答案 1 :(得分:1)
也许这对你的情况来说太过分了,但你可能想考虑使用HTML解析器。这将解决所有文档格式问题,并让您以标准方式获取标记和属性。虽然Regex可能适用于简单的HTML,但一旦事情变得更复杂,您可能会遇到麻烦(错误匹配或错过匹配)。
以下是Java的可用开源解析器列表:http://java-source.net/open-source/html-parsers
答案 2 :(得分:1)
您也可以尝试此正则表达式src\s+"[=](.*)"\s+>
。
让我们分解
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结构。