Matcher.group()期待された結果.FOR元URL「www.google.com」の一部を返して、私のマッチャは、「WWW」を返します

サンディープDhami:

私の要件は、正規表現を使用して文字列にURLをチェックすることです。私は何をやっていると、文字列はURLが含まれているかどうかのパターンとMatcherの発見を使用しています

 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を。」。

すべてのアイデアはどのような問題になることができます。すべてのヘルプは大幅に受け入れられるだろう。

アンドレアス:

ドキュメントtoString()方法Regex

この正規表現、すなわちの文字列表現を返しパターンこの正規表現のを。

同じパターン文字列から構成された別の正規表現が異なっていてもよいことに注意してくださいオプションをして、異なる文字列にマッチします。

それはと同じであることを意味するregularExpression文字列をなしIGNORE_CASEオプション

だから、あなたが行うときval pattern = Pattern.compile(HyperlinkParser.validRegex.toString())、あなたは、大文字と小文字を区別しないオプションを失い、そして理由ですgoogle.comあなたの正規表現のみ一致するため、一致しませんA-Z

その行を次のように変更します

val pattern = HyperlinkParser.validRegex.toPattern()

そのためには、動作するドキュメントのはtoPattern言います:

インスタンスを返しパターン同じパターン文字列オプションのこのインスタンスとして正規表現があります。

使用する方法を提供正規表現パターンが必要です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=27512&siteId=1