Java 简单正则表达式提取文件夹
检索Java 简单正则表达式提取文件夹,java,regex,Java,Regex,检索folder1/folder22 发件人: 因此,可能有一个或多个文件夹/子文件夹。基本上,我想剥离域名和端口,如果可用和文件名在最后 谢谢您的时间。关于类和getPath()呢 也许这不是最有效的方法,但我认为这是最简单的方法之一: String[] urls = { "http://localhost:8080/folder1/folder22/file.jpg", "http://domain.com/folder1/folder22/file.jpg", "http:
folder1/folder22
发件人:
因此,可能有一个或多个文件夹/子文件夹。基本上,我想剥离域名和端口,如果可用和文件名在最后
谢谢您的时间。关于类和getPath()
呢
也许这不是最有效的方法,但我认为这是最简单的方法之一:
String[] urls = {
"http://localhost:8080/folder1/folder22/file.jpg",
"http://domain.com/folder1/folder22/file.jpg",
"http://127.0.0.0.1:8080/folder1/folder22/file.jpg" };
for (String url : urls)
System.out.println(new File(new URL(url).getPath()).getParent());
您可能应该为此使用Java的URL解析器,但如果必须使用正则表达式:
\b(?=/).*(?=/[^/\r\n]*)
将在所有示例中匹配/folder1/folder22
try {
Pattern regex = Pattern.compile("\\b(?=/).*(?=/[^/\r\n]*)");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
ResultString = regexMatcher.group();
}
说明:
\b
:在单词边界处断言位置(这将在单个斜杠之前起作用,但不会在斜杠之间或斜杠之后起作用。:
)
(?=/)
:断言下一个字符是斜杠
*
:匹配任何内容,直到
(?=/[^/\r\n]*)
:…下面正好是最后一个/
(以及除斜杠或换行符以外的任何其他内容)。从url获取最后两个目录的最佳方法是:
preg_match("/\/([^\/]+\/){2}[^\/]+$/", $path, $matches);
如果匹配,$matches[1]将始终包含您想要的内容,无论完整url的文件名是什么。Thanx Tim Pietzcker,这正是我所需要的。这只适用于两个文件夹,但根据问题的不同,任何数字(>=1)都是可能的。我更喜欢这个方法而不是正则表达式解决方案,因为a)它更容易理解,因为它更明确,b)它是适合这项工作的工具,c)它可能比正则表达式更好地处理边缘情况。
^.+/([^/]+/[^/]+)/[^/]+$
preg_match("/\/([^\/]+\/){2}[^\/]+$/", $path, $matches);