我的要求是使用正则表达式检查字符串中的URL。我正在使用模式和匹配器查找字符串是否包含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)
我期望使用网址“ www.google.com”,但返回的是“ www。”。
任何想法都可能成为问题。任何帮助都将被大大接受。
toString()
的toString()
方法的文档:
返回此正则表达式的字符串表示形式,即此正则表达式的
Regex
。请注意,由相同模式字符串构造的另一个正则表达式可能具有不同的
Regex
,并且可能会以不同的方式匹配字符串。
因此,当您执行regularExpression
时,会丢失不区分大小写的选项,这就是IGNORE_CASE
不匹配的原因,因为您的正则表达式仅匹配val pattern = Pattern.compile(HyperlinkParser.validRegex.toString())
。
将该行更改为:
google.com
这将起作用,因为A-Z
的文档说:
返回带有[[相同模式字符串和选项的
[在需要Pattern的情况下提供使用Regex的方式。val pattern = HyperlinkParser.validRegex.toPattern()
的实例,与此toPattern
的实例一样。