[英]Matcher.group() is returning a part of expected result .For ex a url "www.google.com" , my matcher is returning "www."
我的要求是使用正則表達式檢查字符串中的 URL。 我正在做的是使用 Pattern 和 Matcher 查找字符串是否包含 URL
val pattern = Pattern.compile(HyperlinkParser.validRegex.toString())
val matcher = pattern.matcher(htmlParsedMessage) //"abcd www.google.com def"
while (matcher.find()) {
val url = matcher.group()//contains the required url but it returns "www.".Expected "www.google.com"
val indicesPair = Pair(matcher.start(), matcher.end())
hyperlinkStartEndIndicesList.add(indicesPair)
}
matcher.reset()
HyperlinkParser.validRegex
在哪里
private const val regularExpression = "(?:(?:https?|ftp|file):|www.|ftp.)(?:([-A-Z0-9+&@#/%=~_|\$?!:,.]*)|[-A-Z0-9+&@#/%=~_|\$?!:,.])*(?:([-A-Z0-9+&@#/%=~_|\$?!:,.]*)|[A-Z0-9+&@#/%=~_|\$])"
val validRegex = Regex(regularExpression,RegexOption.IGNORE_CASE)
我期待 URL“www.google.com”,但它返回“www.”。
任何想法可能是什么問題。 任何幫助都會被極大地接受。
Regex
的toString()
方法的文檔:
返回此正則表達式的字符串表示形式,即此正則表達式的模式。
這意味着它與沒有IGNORE_CASE
選項的正則regularExpression
字符串相同。
因此,當您執行val pattern = Pattern.compile(HyperlinkParser.validRegex.toString())
,您會丟失不區分大小寫的選項,這就是不匹配google.com
的原因,因為您的正則表達式僅匹配AZ
。
將該行更改為:
val pattern = HyperlinkParser.validRegex.toPattern()
這會起作用,因為toPattern
的文檔說:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.