2.3 在一个String中查找子串模式
本章前面的“使用正则表达式来搜索文本”一节说明了如何使用regex模式来比较一个String是否匹配(或部分匹配)一个给定的模式。这里,匹配是从输入字符串的第一个字符开始的。在本节中,将使用regex模式在一个String中查找多个匹配值。举例来说,可以在一篇文档中搜索查找嵌入在正文中的任何URL。首先,需要创建一个匹配URL的模式字符串。下面给出一个能匹配大多数URL的模式:
String urlString = "(http|https|ftp)://[///w//.//-//+//?%=&;:,#]+"; |
此模式并不能有效地描述URL,因为它也匹配一些包含错误语法的URL字符串,如http://。在一些情况下它也会捕获额外的字符,如可能紧跟在嵌入到正文中的URL之后的逗号或分号。这些字符有时会出现在URL中,但是如果URL出现在正文中,这些字符可能不希望URL的一部分而被捕获。但该模式相对简短并且能够很好地用于搜索文本文件中包含的URL。此模式表达式的各部分如下所示:
● http、https或ftp |
String urlString = "(http|https|ftp)://[///w//.//-//+//?%=&;:,#]+"; |
此代码将不能匹配相对的URL(如/images/picture.jpg),这些URL常常出现在HTML文件或省略前置http://的不完整的URL(如wickedcooljava.com)中。为了知道何时应该将某字符串作为相对URL来对待,程序必须理解HTML文件的结构(使用regex也可完成此任务,但是要更困难些)。需要知道每个匹配的上下文,为此必须在理解其语法的基础上分析文件。若想了解更多的信息,请参考第3章。