亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

API 21(android 5)及以下版本的正則表達式模式錯誤

API 21(android 5)及以下版本的正則表達式模式錯誤

慕斯709654 2022-07-06 19:03:22
Android 5 及更低版本在運行時從我的正則表達式模式中獲取錯誤:java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 4:(?<g1>(http|ftp)(s)?://)?(?<g2>[\w-:@])+(?<TLD>\.[\w\-]+)+(:\d+)?((|\?)([\w\-._~:/?#\[\]@!$&'()*+,;=.%])*)*這是代碼示例:val urlRegex = "(?<g1>(http|ftp)(s)?://)?(?<g2>[\\w-:@])+(?<TLD>\\.[\\w\\-]+)+(:\\d+)?((|\\?)([\\w\\-._~:/?#\\[\\]@!$&'()*+,;=.%])*)*"val sampleUrl = "https://www.google.com"val urlMatchers = Pattern.compile(urlRegex).matcher(sampleUrl)assert(urlMatchers.find())這種模式在 21 以上的所有 API 上都非常有效。
查看完整描述

1 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

似乎早期版本不支持命名組。根據這個來源,命名組是在 Kotlin 1.2 中引入的。如果您不需要這些子匹配,請刪除它們,并且僅使用正則表達式進行驗證。


您的正則表達式非常低效,因為它包含許多嵌套的量化組。請參閱下面的“更清潔”版本。


此外,您似乎想檢查輸入字符串中是否存在正則表達式匹配。使用Regex#containsMatchIn():


val urlRegex = "(?:(?:http|ftp)s?://)?[\\w:@.-]+\\.[\\w-]+(?::\\d+)?\\??[\\w.~:/?#\\[\\]@!$&'()*+,;=.%-]*"

val sampleUrl = "https://www.google.com"

val urlMatchers = Regex(urlRegex).containsMatchIn(sampleUrl)

println(urlMatchers) // => true

請參閱Kotlin 演示和正則表達式演示。


如果您需要檢查整個字符串匹配,請使用matches:


Regex(urlRegex).matches(sampleUrl)

查看另一個 Kotlin 演示。


請注意,要定義正則表達式,您需要使用Regex類構造函數。


查看完整回答
反對 回復 2022-07-06
  • 1 回答
  • 0 關注
  • 241 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號