gpt4 book ai didi

regex - 使用 Regex.fromLiteral() 创建的 Regex 到底匹配什么?

转载 作者:行者123 更新时间:2023-12-04 22:28:25 30 4
gpt4 key购买 nike

我用 Regex.fromLiteral(".*") 创建了一个非常简单的匹配所有正则表达式.

根据documentation :“返回指定文字字符串的文字正则表达式。”

但是我真的不明白“对于指定的文字字符串”应该是什么意思。

考虑这个例子:

fun main(args: Array<String>) {
val regex1 = ".*".toRegex()
val regex2 = Regex.fromLiteral(".*")
println("regex1 matches abc: " + regex1.matches("abc"))
println("regex2 matches abc: " + regex2.matches("abc"))
println("regex2 matches .* : " + regex2.matches(".*"))
}

输出:
regex1 matches abc: true
regex2 matches abc: false
regex2 matches .* : true

很明显(与我的预期相反), Regex.fromLiteral()String.toRegex()行为完全不同(我已经尝试了几十种不同的参数 regex2.matches() - 唯一返回 true 的是 .* )

这是否意味着使用 Regex.fromLiteral() 创建的正则表达式总是只匹配创建它的确切字符串?

如果是,那么这种正则表达式有哪些可能的用例? (我想不出任何有用的场景)

最佳答案

是的,它确实创建了一个与 String 中的文字字符匹配的正则表达式。 .当您尝试匹配将在正则表达式中解释的符号时,这很方便 - 您不必以这种方式转义它们。

例如,如果您要查找包含 .*[](1)?[2] 的字符串,您可以执行以下操作:

val regex = Regex.fromLiteral(".*[](1)?[2]")

regex.containsMatchIn("foo") // false
regex.containsMatchIn("abc.*[](1)?[2]abc") // true

当然,您几乎可以用 Regex 做任何您能做的事情。只是普通 String方法也是。
val literal = ".*[](1)?[2]"
literal == "foo" // equality checks
literal in "abc.*[](1)?[2]abc" // containment checks
"some string".replace(literal, "new") // replacements

但有时你需要一个 Regex实例作为参数,所以 fromLiteral在这些情况下可以使用方法。对于某些用例,对不同输入的这些不同操作的性能也可能很有趣。

关于regex - 使用 Regex.fromLiteral() 创建的 Regex 到底匹配什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45035672/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com