Scala 正则表达式:匹配长 unicode Devanagari 模式失败
Scala regular expression : matching a long unicode Devanagari pattern fails
考虑以下脚本代码:
导入 scala.util.matching.Regex
val VIRAMA = "्"
val consonantNonVowelPattern = s"(म|त|य)([^$VIRAMA])".r
// val consonantNonVowelPattern = s"(थ|ठ|छ|स|ब|घ|ण|ट|ज|ग|न|ष|भ|ळ|ढ|ख|श|प|ह|ध|ङ|म|झ|ड|ल|व|र|फ|क|द|च|ञ|त|य)([^$VIRAMA])".r
var output = "असय रामः "
output = consonantNonVowelPattern.replaceAllIn(output, _ match {
case consonantNonVowelPattern(consonant, followingCharacter) =>
consonant + VIRAMA + "a" + followingCharacter
})
println("After virAma addition: " + output.mkString("-"))
它产生以下正确输出:
After virAma addition: अ-स-य-्-a- -र-ा-म-्-a-ः-
但是,如果我使用较长的模式(上面已注释掉),我会得到以下错误输出:
After virAma addition: अ-स-्-a-य- -र-्-a-ा-म-्-a-ः-
这是一个错误吗?我做错了什么吗?
以下感谢Lalit Pant-
我假设第二种情况的正确输出是:
अ-स-्-a-य-्-a- -र-्-a-ा-म-्-a-ः-
如果是这样,请继续阅读。如果没有,请告诉我预期的输出。
问题似乎是,对于更大的 'consonantNonVowelPattern','output' 中“सय”的存在使得“य”在您的模式匹配之后显示为 'followingCharacter' 'स' 辅音。因此,“य”从未被报告为辅音。
考虑以下脚本代码: 导入 scala.util.matching.Regex
val VIRAMA = "्"
val consonantNonVowelPattern = s"(म|त|य)([^$VIRAMA])".r
// val consonantNonVowelPattern = s"(थ|ठ|छ|स|ब|घ|ण|ट|ज|ग|न|ष|भ|ळ|ढ|ख|श|प|ह|ध|ङ|म|झ|ड|ल|व|र|फ|क|द|च|ञ|त|य)([^$VIRAMA])".r
var output = "असय रामः "
output = consonantNonVowelPattern.replaceAllIn(output, _ match {
case consonantNonVowelPattern(consonant, followingCharacter) =>
consonant + VIRAMA + "a" + followingCharacter
})
println("After virAma addition: " + output.mkString("-"))
它产生以下正确输出:
After virAma addition: अ-स-य-्-a- -र-ा-म-्-a-ः-
但是,如果我使用较长的模式(上面已注释掉),我会得到以下错误输出:
After virAma addition: अ-स-्-a-य- -र-्-a-ा-म-्-a-ः-
这是一个错误吗?我做错了什么吗?
以下感谢Lalit Pant-
我假设第二种情况的正确输出是: अ-स-्-a-य-्-a- -र-्-a-ा-म-्-a-ः-
如果是这样,请继续阅读。如果没有,请告诉我预期的输出。
问题似乎是,对于更大的 'consonantNonVowelPattern','output' 中“सय”的存在使得“य”在您的模式匹配之后显示为 'followingCharacter' 'स' 辅音。因此,“य”从未被报告为辅音。