这是我的字符串:/my/name/is/the/following/string/name.lastname/file.txt
我想从这个字符串中提取name.lastname
。
我试过使用 \/.*\.app
,但这会选择:
/my/name/is/the/following/string/name.lastname
如何忽略前 6 或 7 个 /
?
最佳答案
你有很多很好的答案。这是一个使用正向预测 (?=)
的方法,以字符串 $
结尾。
([^\/]+)(?=\/[^\/]+$)
这里的好处是您可以在最后一个文件夹之前拥有尽可能多的文件夹,并且它仍然可以工作。
DEMO
如果我们把它分解,你有一个
- 捕获组:
([^\/]+)
,和一个 - 积极向前看
(?=\/[^\/]+$)
.
捕获组将匹配所有内容除了 ^
正斜杠/
,一次到多次+
。这实际上会捕获正斜杠之间的每个字符串,这就是我们使用正向预测的原因。
积极向前看的最大因素是它会查找字符串 $
的结尾(由美元符号表示)。它将在正斜杠 /
之后查找所有内容(因此是 (?=\/
部分),然后它将确保不存在其他正斜杠但匹配所有其他字符 [^\/]
一到无限次 +
到字符串 $
的结尾。
关于正则表达式忽略字符的前 6 个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49623243/