这是我的字符串:/my/name/is/the/following/string/name.lastname/file.txt
我想从此字符串中提取name.lastname
。
我尝试过使用\/.*\.app
,但这会选择:
/my/name/is/the/following/string/name.lastname
如何忽略前6个或7个/
?
答案 0 :(得分:3)
你有很多好的答案。这是一个使用正面向前(?=)
的字符串$
的结尾。
([^\/]+)(?=\/[^\/]+$)
这里的好处是你可以在最后一个文件夹之前拥有尽可能多的文件夹,它仍然可以使用。
如果我们打破这个,你有一个
([^\/]+)
和(?=\/[^\/]+$)
。捕获组将匹配所有除 ^
正斜杠/
之外的所有内容,其中一个与+
匹配。这实际上会捕获正斜杠之间的每个字符串,这就是我们使用正向前瞻的原因。
您积极前瞻的最大因素是它会查找字符串$
的结尾(由美元符号表示)。它将在正斜杠/
之后查找所有内容(因此(?=\/
部分),然后它将确保不存在其他正斜杠,但匹配所有其他字符[^\/]
一次到无限次+
1}}到字符串$
的末尾。
答案 1 :(得分:1)
答案 2 :(得分:1)
如果您想要更灵活的解决方案,即之间的字符串 最后2斜杠(不一定是第6和第7),您可以使用:
\/([^\/]+)\/(?!.*\/)
含义:
\/
- 斜线。([^\/]+)
- 捕获第1组 - 除斜线之外的一系列字符。
这就是你真正想要匹配的东西。\/
- 另一个斜线。(?!
- 负向前瞻:.*\/
- 任何字符和斜线的序列。)
- 否定前瞻结束(即使在JavaScript版本的Regex中也能正常工作)。上述否定前瞻实际上意味着:无处可去 可以出现任何斜杠。
答案 3 :(得分:1)
试试这个,它将匹配6或7位
([a-z\.]*)(?=\/[a-z]*\.txt)
(?=\/[a-z]*\.txt) to check ends with .txt
([a-z\.]*) CapturingGroup to capture the name
答案 4 :(得分:1)
((\/)[a-b]*).[^\/]{12}
嗨,请尝试上面的Reg ex,它应该返回你期望的