【问题标题】:Remove backslash before forward slash在正斜杠之前删除反斜杠
【发布时间】:2022-03-25 16:34:26
【问题描述】:

上下文:GoogleBooks API returing unexpected thumbnail url

好的,我在that问题中找到了问题的原因

我发现从 googlebooks api 返回的 url 是这样的:

http:/\/books.google.com\/books\/content?id=0DwKEBD5ZBUC&printsec=frontcover&img=1&zoom=5&source=gbs_api

转到那个 url 会返回一个错误,但是如果我用“/”替换了“\ /”,它将返回正确的 url

是否有类似 java/kotlin 正则表达式的东西可以将 http:/\/books.google.com\/ 更改为 http://books.google.com/ (我在 python 中知道一些正则表达式,但我在 java/kotlin 中一无所知)

谢谢

【问题讨论】:

  • 您不需要正则表达式。简单的字符串替换就足够了:s.replace("\\/", "/")。请注意,如果“/”字符被转义,那么其他类似的字符也可能被转义。

标签: java regex kotlin


【解决方案1】:

您可以使用三引号字符串文字(充当原始字符串文字,其中反斜杠被视为文字字符而不是字符串转义序列的一部分)+ kotlin.text.replace:

val text = """http:/\/books.google.com\/books\/content?id=0DwKEBD5ZBUC&printsec=frontcover&img=1&zoom=5&source=gbs_api"""
print(text.replace("""\/""", "/"))

输出:

http://books.google.com/books/content?id=0DwKEBD5ZBUC&printsec=frontcover&img=1&zoom=5&source=gbs_api

请参阅Kotlin demo。

注意:您需要将常规字符串文字中的反斜杠加倍:

print(text.replace("\\/", "/"))

如果您需要在正则表达式中使用这种“反斜杠 + 斜杠”模式,您需要在三引号字符串文字中使用 2 个反斜杠,在常规字符串文字中使用 4 个反斜杠:

print(text.replace("""\\/""".toRegex(), "/"))
print(text.replace("\\\\/".toRegex(), "/"))

注意:没有必要在 Kotlin 正则表达式声明中转义 / 正斜杠,因为它不是特殊的正则表达式元字符,并且 Kotlin 正则表达式是用字符串文字定义的,而不是正则表达式文字,并且因此不需要正则表达式分隔符(/ 在支持此表示法的环境中通常用作正则表达式分隔符字符)。

【讨论】:

    【解决方案2】:

    您可以匹配协议,然后将反斜杠后跟正斜杠替换为仅正斜杠

    https?:\\?/\\?/\S+
    

    Java 中的模式

    String regex = "https?:\\\\?/\\\\?/\\S+";
    

    Java demo | regex demo

    例如在 Java 中:

    String regex = "https?:\\\\?/\\\\?/\\S+"; 
    String string = "http:/\\/books.google.com\\/books\\/content?id=0DwKEBD5ZBUC&printsec=frontcover&img=1&zoom=5&source=gbs_api";
      if(string.matches(regex)) {
        System.out.println(string.replace("\\/", "/"));
      }
    }
    

    输出

    http://books.google.com/books/content?id=0DwKEBD5ZBUC&printsec=frontcover&img=1&zoom=5&source=gbs_api
    

    【讨论】:

      【解决方案3】:

      我有同样的问题,我的网址是:

      String url="https:\\/\\/www.dailymotion.com\\/cdn\\/H264-320x240\\/video\\/x83iqpl.mp4?sec=zaJEh8Q2ahOorzbKJTOI7b5FX3QT8OXSbnjpCAnNyUWNHl1kqXq0D9F8iLMFJ0ocg120B-dMbEE5kDQJN4hYIA";
      

      我用这段代码解决了这个问题:

       replace("\\/", "/");
      

      【讨论】:

        猜你喜欢
        • 2016-06-16
        • 1970-01-01
        • 2019-01-13
        • 1970-01-01
        • 2013-11-14
        • 2017-05-12
        • 1970-01-01
        • 2018-07-26
        • 2021-12-31
        相关资源
        最近更新 更多