簡體   English   中英

Matcher.group() 正在返回預期結果的一部分。例如,網址“www.google.com”,我的匹配器正在返回“www”。

[英]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.”。

任何想法可能是什么問題。 任何幫助都會被極大地接受。

RegextoString()方法的文檔

返回此正則表達式的字符串表示形式,即此正則表達式的模式

請注意,從同一模式字符串構造的另一個正則表達式可能具有不同的選項,並且可能以不同的方式匹配字符串。

這意味着它與沒有IGNORE_CASE選項的正regularExpression字符串相同。

因此,當您執行val pattern = Pattern.compile(HyperlinkParser.validRegex.toString()) ,您會丟失不區分大小寫的選項,這就是不匹配google.com的原因,因為您的正則表達式僅匹配AZ

將該行更改為:

val pattern = HyperlinkParser.validRegex.toPattern()

這會起作用,因為toPattern文檔說:

返回與此Regex實例具有相同模式字符串選項Pattern實例。

提供在需要Pattern 的地方使用Regex的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM