2.3 在一個(gè)String中查找子串模式
本章前面的“使用正則表達(dá)式來(lái)搜索文本”一節(jié)說(shuō)明了如何使用regex模式來(lái)比較一個(gè)String是否匹配(或部分匹配)一個(gè)給定的模式。這里,匹配是從輸入字符串的第一個(gè)字符開(kāi)始的。在本節(jié)中,將使用regex模式在一個(gè)String中查找多個(gè)匹配值。舉例來(lái)說(shuō),可以在一篇文檔中搜索查找嵌入在正文中的任何URL。首先,需要?jiǎng)?chuàng)建一個(gè)匹配URL的模式字符串。下面給出一個(gè)能匹配大多數(shù)URL的模式:
String urlString = "(http|https|ftp)://[/\\w\\.\\-\\+\\?%=&;:,#]+"; |
此模式并不能有效地描述URL,因?yàn)樗财ヅ湟恍┌e(cuò)誤語(yǔ)法的URL字符串,如http://////////。在一些情況下它也會(huì)捕獲額外的字符,如可能緊跟在嵌入到正文中的URL之后的逗號(hào)或分號(hào)。這些字符有時(shí)會(huì)出現(xiàn)在URL中,但是如果URL出現(xiàn)在正文中,這些字符可能不希望URL的一部分而被捕獲。但該模式相對(duì)簡(jiǎn)短并且能夠很好地用于搜索文本文件中包含的URL。此模式表達(dá)式的各部分如下所示:
● http、https或ftp |
String urlString = "(http|https|ftp)://[/\\w\\.\\-\\+\\?%=&;:,#]+"; |
此代碼將不能匹配相對(duì)的URL(如/images/picture.jpg),這些URL常常出現(xiàn)在HTML文件或省略前置http://的不完整的URL(如wickedcooljava.com)中。為了知道何時(shí)應(yīng)該將某字符串作為相對(duì)URL來(lái)對(duì)待,程序必須理解HTML文件的結(jié)構(gòu)(使用regex也可完成此任務(wù),但是要更困難些)。需要知道每個(gè)匹配的上下文,為此必須在理解其語(yǔ)法的基礎(chǔ)上分析文件。若想了解更多的信息,請(qǐng)參考第3章。