gpt4 book ai didi

java - 正则表达式在 scala 中使用 hitEnd

转载 作者:行者123 更新时间:2023-12-02 12:35:56 25 4
gpt4 key购买 nike

我一直在观看这个部分匹配的示例

    String[] ss = { "aabb", "aa", "cc", "aac" };
Pattern p = Pattern.compile("aabb");
Matcher m = p.matcher("");

for (String s : ss) {
m.reset(s);
if (m.matches()) {
System.out.printf("%-4s : match%n", s);
}
else if (m.hitEnd()) {
System.out.printf("%-4s : partial match%n", s);
}
else {
System.out.printf("%-4s : no match%n", s);
}
}

我想使用 hitEnd 作为我的 scala 模式匹配正则表达式

  val VERSION = "([0-2].0)"
val MESSAGE = s"A message with version $VERSION".r

def checkMessage(action: String): Boolean = {
action match {
case MESSAGE(version) => true
case _ => false
}
}

我想要的是,如果有人输入A message with version 3.0告诉他该消息有部分匹配,但他输入的版本不正确。

知道如何在 scala 中使用这个 hitEnd 吗?

问候

最佳答案

可以从 Scala 编译的正则表达式中获取 Matcher 但我不认为它会做你想要的事情。字符串 "version" 与模式 version [0-2].0 部分匹配,但字符串 "version 3.0" 是不是。

val m = "version ([0-2].0)".r.pattern.matcher("")

for (s <- Seq("version 1.0", "v", "version ", "version 3.0")) {
m.reset(s)
if (m.matches) println(f"$s%-11s : match")
else if (m.hitEnd) println(f"$s%-11s : partial match")
else println(f"$s%-11s : no match")
}

输出:

version 1.0 : match
v : partial match
version : partial match
version 3.0 : no match

另一种方法是编译两种模式,一种用于一般情况,一种用于特定目标。

val prefix  = "A message with version "
val goodVer = (prefix + "([0-2].0)").r
val someVer = (prefix + "(.*)").r

def getVer(str: String): String = str match {
case goodVer(v) => s"good: $v"
case someVer(v) => s"wrong: $v"
case _ => "bad string"
}

getVer("A message with version 2.0") //res0: String = good: 2.0
getVer("A message with version 3.0") //res1: String = wrong: 3.0
getVer("A message with version:2.0") //res2: String = bad string

关于java - 正则表达式在 scala 中使用 hitEnd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45144423/

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