我想找到双引号内的字符串。
text : <a href = "http://weqweqwewqewqeqwe">
expected : http://weqweqwewqewqeqwe
如何使用正则表达式获取字符串。
val page1 = "<a href=\"http://weqweqwewqewqeqwe\">"
val urlMatcher = "\".+\"".toRegex()
println(page1.split(urlMatcher))
以上代码是我的想法。但是,它运行不正常。
答案 0 :(得分:3)
使用括号将正则表达式匹配文本的特定部分分组:
val urlMatcher = "\"(.+)\"".toRegex()
然后使用find
从类似这样的字符串中提取与您的正则表达式匹配的文本:
urlMatcher.find(text)?.groupValues?.getOrNull(1)
答案 1 :(得分:0)
您可以使用
val page1 = "<a href=\"http://weqweqwewqewqeqwe\">"
val urlMatcher = "\"([^\"]*)\"".toRegex()
// Or, you may reduce escaping with a triple-quoted string literal:
// val urlMatcher = """"([^"]*)"""".toRegex()
println(urlMatcher.find(page1)?.value) // => "http://weqweqwewqewqeqwe"
println(urlMatcher.find(page1)?.groupValues?.getOrNull(1)) // => http://weqweqwewqewqeqwe
请参见Kotlin demo。请注意Regex#find(String)
语法。取得匹配后,.value
将为您获取整个匹配值(不需要.groupValues?.getOrNull(0)
),.groupValues?.getOrNull(1)
将为第1组中的值获取。
"([^"]*)"
模式与"
匹配,然后将"
以外的1个或多个字符捕获到组1中(使用[^"]*
),然后匹配右双引号
每当您需要匹配可能包含转义双引号的"..."
子字符串时使用
val urlMatcher = """(?s)(?<!\\)(?:\\{2})*("[^\\"]*(?:\\.[^"\\]*)*")""".toRegex()
要仅捕获双引号之间的子字符串,请如下所示移动捕获括号:
"""(?s)(?<!\\)(?:\\{2})*"(([^\\"]*(?:\\.[^"\\]*)*))""""
^ ^
请参见this regex demo。
模式详细信息
(?s)
-一个.
现在可以匹配任何字符(?<!\\)
-当前位置左侧不能出现\
个字符(?:\\{2})*
-0个或多个双反斜杠序列(因此,所有转义的引号都将被忽略)"
-双引号([^\\"]*(?:\\.[^"\\]*)*)
-捕获组1:
[^\\"]*
-除\
和"
以外的0多个字符(?:\\.[^"\\]*)*
-0次以上的出现
\\.
-一个\
后跟任意字符[^\\"]*
-除\
和"
以外的0多个字符"
-双引号。