【问题标题】:What's wrong with this regex """[\b]""".r in scalascala 中的这个正则表达式 """[\b]""".r 有什么问题
【发布时间】:2018-02-07 06:12:14
【问题描述】:

它抛出这个错误:

scala> val a = """[\b]""".r
java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 2

根据https://www.scala-lang.org/api/2.12.3/scala/util/matching/Regex.html,使用三引号时不需要转义反斜杠。当我尝试对 \n、\t、\v 进行相同操作时,它不会给我一个错误。 \b 的特殊之处在于它在括号内(它是一个退格字符)与匹配单词边界时具有不同的含义。

【问题讨论】:

标签: scala


【解决方案1】:

\b 不会被解释为退格字符。 """[\b]""" 等价于 "[\\b]"。使用三引号时不需要转义反斜杠的原因是反斜杠没有任何特殊意义,因为根本不支持转义序列。所以这种形式的字符串表达式是无法输入退格符的。

要使用转义序列,例如\b 来表示退格,需要使用传统的引号样式:

scala> val a = "[\b]".r
a: scala.util.matching.Regex = [?]

不幸的是,您现在必须转义正则表达式中可能出现的任何其他反斜杠。

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多