正则表达式,用于获取最后一次斜杠后的所

Cod*_*ack 44 regex

我正在浏览stackoverflow并注意到一个正则表达式,用于匹配最后一个斜杠后的所有内容

([^/]+$)
Run Code Online (Sandbox Code Playgroud)

例如,如果您有http://www.blah.com/blah/test ,则reg表达式将提取"test"而不带单引号.

我的问题是它为什么这样做?不是^ /意味着斜线的开头?

编辑:我想我不明白+ $抓取"测试".+重复上一个项目一次或多次,以便忽略所有/斜杠之间的所有数据.然后$如何提取测试

Dmi*_*nko 31

不,^内部[]意味着否定.

[/] 代表'集合中的任何字符[/]'.

[^/] 代表'任何不在集合中的字符[/]'.

  • @CodeCrack` [^ /]`匹配一个非斜杠; `[^ /] +`只匹配第一个非斜线子串; `[^ /] + $`匹配测试结束时的非斜杠子字符串. (4认同)
  • 请编辑答案以直接回答问题,而不是仅将其放在评论中。 (2认同)

Beh*_*zad 19

在原始问题中,只backslash需要一个before slash,在这种情况下,正则表达式将进入everything after last slash字符串

([^\/]+$)
Run Code Online (Sandbox Code Playgroud)

  • 在“[ ]”内部时不需要转义“/” (2认同)

小智 5

仅供参考,对于非正则表达式版本,根据您使用的语言,您可以使用 substring 和 lastIndexOf 方法的组合。只需找到“/”字符的最后一个索引,并获取紧跟其后的子字符串。

即,在 Java 中

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