Check if string contains single backslashes with regex

前端 未结 3 2043
半阙折子戏
半阙折子戏 2021-01-26 19:00

I have tried to fix this for a long time, and i just can\'t do it.

It could be any string, but this is an example:

\"\\This string \\contains some\\ bac         


        
相关标签:
3条回答
  • 2021-01-26 19:11

    Not sure what you're asking.. are you asking how to write a String literal that represents the String you gave as an example? You could either escape the backslash with another backslash, or use triple quotes.

    scala> "\\This string \\contains some\\ backslashes\\"
    String = \This string \contains some\ backslashes\
    
    scala> """\This string \contains some\ backslashes\"""
    String = \This string \contains some\ backslashes\
    

    And replace the backslashes using the same techniques.

    scala> "\\This string \\contains some\\ backslashes\\".replace("\\","\\\\")
    String = \\This string \\contains some\\ backslashes\\
    

    or

    scala> """\This string \contains some\ backslashes\""".replace("""\""","""\\""")
    String = \\This string \\contains some\\ backslashes\\
    

    But I have a feeling you want to do something else, like validate input. Maybe you could provide a bit more context?

    0 讨论(0)
  • 2021-01-26 19:14

    Try This

    val s = """\This string \contains some\ backslashes\"""
    
    s.replaceAll("""\\""","""\\\\""")
    
    0 讨论(0)
  • 2021-01-26 19:26

    It seems you just want to check if a string matches a regex pattern partially, namely, if it contains a literal backslash not preceded nor followed with a backslash.

    Use

    (?<!\\)\\(?!\\)
    

    See the regex demo.

    Sample Scala code:

    val s = """"\This string\\ \contains some\ backslashes\""""
    val rx = """(?<!\\)\\(?!\\)""".r.unanchored
    val ismatch = s match {
      case rx(_*) => true
      case _ => false
    }
    println(ismatch)
    

    See the Scala online demo.

    Note:

    • """(?<!\\)\\(?!\\)""".r.unanchored - this line declares a regex object and makes the pattern unanchored, so that no full string match is no longer required by the match block
    • Inside match, we use case rx(_*) as there is no capturing group defined inside the pattern itself
    • The pattern means: match a backslash (\\) that is not preceded with a backslash ((?<!\\)) and is not followed with a backslash ((?!\\)).
    0 讨论(0)
提交回复
热议问题