获取最后一个斜杠后面的所有内容的正则表达式

93
我正在浏览stackoverflow,发现一个用于匹配最后一条斜线后面的所有内容的正则表达式。
([^/]+$)
例如,如果您有http://www.blah.com/blah/test,那么正则表达式会提取不带单引号的“test”。
我的问题是为什么会这样做?难道^ / 不表示斜杠的开头吗?
编辑: 我猜我不明白如何使用+ $来抓取“test”。+ 重复上一个项目一次或多次,因此它忽略所有在/斜杠之间的数据。那么如何使用$提取test呢?

8
这类问题的绝佳资源是http://regexr.com(点击这里:http://regexr.com?2vpj8获取您实际表达式,如果您将鼠标悬停在其每个部分上,您将获得一个很好的描述该规则所做的事情)。 - Chris Cashwell
7个回答

82

在原问题中,只需要在斜杠前加上反斜杠,这样正则表达式将获取字符串中最后一个斜杠后的所有内容。

([^\/]+$)

2
在“[ ]”内部时,不需要转义“/”。 - Cezar D.

44

不,[] 中的 ^ 表示否定。

[/] 表示“集合 [/] 中的任意字符”。

[^/] 表示“不在集合 [/] 中的任意字符”。


1
我想我不理解如何使用 +$ 抓取“test”。+ 重复前一个项目一次或多次,因此它忽略所有 / 斜杠之间的数据。那么 $ 如何提取 test 呢? - CodeCrack
8
@CodeCrack [^/] 匹配一个非斜杠字符;[^/]+ 匹配第一个非斜杠子字符串;[^/]+$ 匹配你测试的末尾处的非斜杠子字符串。 - Dmitry Ovsyanko
2
请编辑答案,直接回答问题,而不是只在评论中提供答案。 - Hack-R

8

提供一种非正则表达式版本的方法,具体实现取决于编程语言,可以结合使用substring和lastIndexOf方法。只需找到“/”字符的最后一个索引,然后获取其后面的子字符串。

例如,在Java中:

String targetString = "a/string/with/slashes/in/it";
int lastSlashIndex = targetString.lastIndexOf('/');
String everythingAfterTheFinalSlash = targetString.substring(lastSlashIndex + 1);

3

方括号内,^/ 表示非 /。因此这匹配了一系列非 / 字符,直到行尾。


1

^[] 的开头表示字符类取反。 [...] 指定要匹配的一组字符。 [^...] 表示匹配除该字符集之外的每个字符。

因此,[^/] 表示匹配除 / 以外的所有可能字符。


0
如果您将^放在组内,它表示该组中不存在的所有字符。因此匹配除斜杠之外的所有字符直到行尾$锚点。

0
不,符号“^”在不同的上下文中有不同的含义。当它在字符类(即“[]”)中时,“^”表示否定表达式,意思是“匹配除了‘/’以外的任何字符”。
而在“[]”之外,“^”则表示你刚才所说的意思。

我有一个类似的问题。 我有/db/env/dbo/analytical/data_from_google/sys_year=2022/sys_month=05/sys_day=14/part-00073-a4022c1a-c8a2-4af9-8289-0c3e514396e8.c002,如何使用正则表达式来获取/db/env/dbo/analytical/data_from_google/sys_year=2022/sys_month=05/sys_day=14/,也就是删除最后一个斜杠后面的所有内容。 - Mariusz Kowalewski

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