如何使用正则表达式从字符串中提取第 n 个 URL?
Posted
技术标签:
【中文标题】如何使用正则表达式从字符串中提取第 n 个 URL?【英文标题】:How to extract nth URL from string using regex? 【发布时间】:2021-05-06 19:31:26 【问题描述】:我想使用正则表达式提取第二个 URL,我不能使用任何其他东西,到目前为止,我已经设法使用正则表达式从字符串中提取所有 URL,但它只是给出了第一个 URL。
fun main()
var text = "hello world https://www.google.com hello world https://www.***.com hello world https://www.test.com"
var regex = """((http|ftp|https):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)"""
println(performRegex(text, regex))
private fun performRegex(text: String?, regex: String?): String?
val regexPattern = Regex("""$regex""")
return regexPattern.find(text.toString())?.value
电流输出:https://www.google.com
预期输出:https://www.***.com
【问题讨论】:
尝试使用 findAll 并获取第二项。 不改代码就可以了。该代码仅用于演示。它只需要使用正则表达式来处理 【参考方案1】:你可以使用
private fun performRegex(text: String?, regex: String?): String?
val regexPattern = Regex("""$regex""")
val matchList = regexPattern.findAll(text.toString()).mapit.value.toList()
return if (matchList.size >= 2) matchList[1] else null
fun main(args: Array<String>)
var text = "hello world https://www.google.com hello world https://www.***.com hello world https://w...content-available-to-author-only...t.com"
var regex = """(?:https?|ftp)://\S+"""
println(performRegex(text, regex))
请参阅online Kotlin demo。
正则表达式是(?:https?|ftp)://\S+
,它匹配http://
、https://
或ftp://
,然后是任何一个或多个非空白字符。
val matchList = regexPattern.findAll(text.toString()).mapit.value.toList()
部分查找所有匹配项并将结果映射到字符串列表。
如果匹配列表大小为两个或更多,return if (matchList.size >= 2) matchList[1] else null
部分返回找到的第二个匹配项,否则返回null
。
【讨论】:
代码仅供演示。我无法更改代码。它只需要使用正则表达式来处理 @VaibhavChopade 您将不得不修改代码,因为正则表达式是一个定义规则的字符串,匹配什么。搜索多少匹配是代码责任。(?:http|ftp)s?://\S++.*?((?:http|ftp)s?://\S+)
can work for you,但您仍然需要获取第 1 组的值。
@VaibhavChopade 当然,我已经展示了。或this way,正则表达式定义为var regex = """(?:http|ftp)s?://\S++.*?((?:http|ftp)s?://\S+)"""
,return 语句必须为return regexPattern.find(text.toString())?.groupValues?.getOrNull(1)
嗨@Wiktor,有没有办法只输出第二场比赛?我之前已经尝试过您的方法,但它会在两个 URL 之间输出整个文本...
@VaibhavChopade 我目前的解决方案就是如何获得第 N 场比赛。第二个。你不能用纯 Java 正则表达式得到它,你必须编辑你的代码。就是这样。以上是关于如何使用正则表达式从字符串中提取第 n 个 URL?的主要内容,如果未能解决你的问题,请参考以下文章