【问题标题】:Get all characters after the last '/' (slash) from url string从 url 字符串中获取最后一个“/”(斜杠)之后的所有字符
【发布时间】:2016-07-10 14:30:13
【问题描述】:

如何从url字符串中获取最后一个'/'(斜杠)之后的所有字符?

在对某个站点发出 webview 请求时,我从我的 URL 方案中收到一个 json 字符串。例如:

app://ga/ecommerce/%7B%22product%22:%22playstation4%22...}]

我想在 last '/'(斜杠)之后获取子字符串。

我怎样才能实现它?请问Regex的格式是什么?

避免使用

NSRange lastDotRange = [sURL rangeOfString:@"/" options:NSBackwardsSearch];

因为我可能在我的 json 中转义了 '/'

谢谢。

【问题讨论】:

  • 不行,组件的最后一部分是URL解码后的json字符串。
  • 已编辑:不能做,组件的最后一部分是 json 字符串,在 URL 解码后可能包含转义的 '/'。

标签: ios objective-c regex filter substring


【解决方案1】:

创建一个 NSURL 并使用 NSURL 方法,例如 lastPathComponent 或 parameterString。这些方法大概是由知道如何处理 URL 的人编写的。

【讨论】:

  • 不能。在我的 json 字符串中,一些参数的值包含“/”,导致 lastPathComponent 在最后一个“/”之后检索字符串。我发现即使 url 字符串没有被解码,它也会受到影响。
【解决方案2】:

你需要的正则表达式是这样的:

((\/){1}([a-z\-]*))$

这将匹配 1 个斜线,所有小写字母和连字符。您可以在其中添加更多字符,例如大写字母(等)的 A-Z,并且“$”位置从字符串末尾匹配它,

【讨论】:

    【解决方案3】:

    您可以在数组中拆分字符串并从数组中获取最后一个对象,如下所示:

    NSString *myString = @"app://ga/ecommerce/product:playstation4"; 
    NSArray* spliteArray = [myString componentsSeparatedByString: @"/"];
    NSString* lastString = [spliteArray lastObject];
    

    【讨论】:

      【解决方案4】:

      试试这个:

          NSURL *url = [NSURL URLWithString:@"app://ga/ecommerce/%7B%22product%22:%22playstation4%22..."];
          NSString *last = [url lastPathComponent];
      

      【讨论】:

      • 这里有可行的答案,但如果您使用 URL 对象,这是最佳解决方案。
      【解决方案5】:

      好吧,在 shouldStartLoadWithRequest 委托中使用 Regex 似乎相当昂贵,尤其是如果您拥有具有大量 web 视图的混合应用程序。我在 webview 中的一些网站可能有多个请求,一些在后台运行。如果 webview 每次加载请求时 webview 都会触发 regex 代码,那就很痛苦了。

      而且,我在最后一个组件参数(json 字符串)中转义了“/”,这可能会导致 lastComponent 在转义的“/”字符后中断。

      因此我坚持使用 if-else 语句进行代码过滤,并将字符串与 URL 的组件进行比较,例如

      request.URL.absoluteString
      request.URL.host
      request.URL.fragment
      

      还发现@Nitin Gohel 很有用。

      【讨论】:

        【解决方案6】:

        对于 Swift 3 试试这个。

        let fileName = "your/file/name/here"
        let fileArray = fileName?.components(separatedBy: "/")
        let finalFileName = fileArray?.last
        

        输出:“这里”

        【讨论】:

          猜你喜欢
          • 2013-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-23
          • 1970-01-01
          • 2023-01-07
          • 2020-05-04
          • 1970-01-01
          相关资源
          最近更新 更多