iOS:从URL字符串中获取最后一个斜杠('/')后的所有字符

12
从URL字符串中获取最后一个斜杠('/')之后的所有字符应该怎么做?
当我请求特定网站的Web视图时,从我的URL方案中接收JSON字符串。例如:
app://ga/ecommerce/%7B%22product%22:%22playstation4%22...}
我想抓取最后一个斜杠('/')之后的子字符串。
如何实现?正则表达式格式是什么?
请避免使用

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

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

谢谢。


无法完成,组件的最后一部分是URL解码后的JSON字符串。 - felixwcf
编辑:无法执行,组件的最后一部分是 JSON 字符串,可能在 URL 解码后包含转义字符“/”。 - felixwcf
7个回答

30

尝试以下内容适用于Swift 3。

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

输出: "Here"


不确定为什么原帖作者接受了这个答案,如果他们声明最后一个斜杠可能被编码。但如果这个答案被接受,那么更简单的答案就是使用NSString *lastPathComponent = sURL.lastPathComponent;(使用原帖作者的代码和他们在这个例子中使用的Objective-C)。 - HangarRash

6

试试这个:

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

这里有可行的答案,但如果您正在使用URL对象,则这是最佳解决方案。 - Cyril

2
您可以将字符串拆分为数组,并像以下示例一样获取数组中的最后一个对象:
NSString *myString = @"app://ga/ecommerce/product:playstation4"; 
NSArray* spliteArray = [myString componentsSeparatedByString: @"/"];
NSString* lastString = [spliteArray lastObject];

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

无法完成。在我的JSON字符串中,一些参数的值包含“/”,导致lastPathComponent检索最后一个“/”之后的字符串。我发现即使URL字符串还没有解码,它也会受到影响。 - felixwcf

0

看起来在shouldStartLoadWithRequest代理中使用正则表达式相当昂贵,特别是如果您有大量的Web视图的混合应用程序。我的一些网站在Web视图中可能会有多个请求,有些在后台运行。如果每次Web视图加载请求时都触发正则表达式代码,那将是痛苦的。

此外,我已经转义了最后一个组件参数(JSON字符串)中的'/',这可能会导致转义后的'/'字符之后的lastComponent断开。

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

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

我还发现@Nitin Gohel很有用。


0
你需要的正则表达式应该是这样的:
((\/){1}([a-z\-]*))$
它将匹配一个斜杠,后面跟着所有小写字母和连字符。你可以在里面添加更多的字符,比如大写字母A-Z(等等),而'$'则表示从字符串末尾开始匹配。

0

一些Swift示例,用于获取URL的“查询”和最后一部分。 请注意,如果您有一个字符串,您必须创建一个URL,以便URL类可以正确地管理这些部分。(字符串没有执行此操作的能力)。

示例:

let s = "https://example.com/search?q=Display+iphone"
let url = URL(string: s)
let lastOnUrl = url?.lastPathComponent
let query = url?.query
print("lastOnUrl:", lastOnUrl!)
print("query:    ", query!)

你将会得到: lastOnUrl: search
query: q=Display+iPhone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接