![](/img/trans.png)
[英]JAVA get string between first and last occurence of a particular char
[英]Java : how to get text between “http://” and first following “/” occurence ? And after first “/” occurence?
我仍然是Java的正则表达式,“ regex”等的新手。
如果我有这样的网址:“ http://somedomain.someextention/somefolder/.../someotherfolder/somepage ”
最简单的方法是:
谢谢 !
您不必(也许不应该)在这里使用正则表达式。 而是使用定义的类来处理此类事情。 例如,您可以使用URL
, URI
, File
类
String address = "http://somedomain.someextention/somefolder/.../someotherfolder/somepage";
URL url = new URL(address);
File file = new File(url.getPath());
System.out.println(url.getHost());
System.out.println(url.getPath());
System.out.println(file.getName());
出站:
somedomain.someextention
/somefolder/.../someotherfolder/somepage
somepage
现在,您需要在资源路径的开头删除/
。 如果资源以/
开头,则可以在此处使用substring(1)
。
但是,如果您真的必须使用正则表达式,可以尝试
^https?://([^/]+)/(.*/([^/]+))$
现在
获取这些组件的最佳方法是使用URI
类。 例如
URI uri = new URI(str);
String domain = uri.getHost();
String path = uri.getPath();
int pos = path.lastIndex("/");
...
// or use File to parse the path string.
您可以使用原始url字符串上的正则表达式来完成此操作,但是存在无法正确处理URL中可能存在的所有可变性的风险。 (提示:@Pchenko提供的正则表达式不是:-))并且您肯定需要使用解码器来处理可能的百分比编码。
这不是正则表达式或URI使用,而是简单的子字符串代码作为练习材料。 缺少一些特殊情况的格式验证。
int lastDelim = str.lastIndexOf('/);
if (lastDelim<0) throw new IllegalArgumentException("Invalid url");
int startIdx = str.indexOf("//");
startIdx = startIdx<0 ? 0 : startIdx+2;
int pathDelim = str.indexOf('/', startIdx);
String domain = str.substring(startIdx, pathDelim);
String path = str.substring(pathDelim+1, lastDelim);
String page = str.substring(lastDelim+1);
如果您想使用正则表达式来解码URL而不是使用URI类(如先前的答案中所述),则下面的链接提供了一个很好的正则表达式教程,并且还解释了如何解码示例URL。 您可以在那里学习并尝试。
它不是正则表达式,也不是可扩展的,但是可以:
public class SomeClass
{
public static void main(String[] args)
{
SomeClass sclass = new SomeClass();
String[] string =
sclass.parseURL("http://somedomain.someextention/somefolder/.../someotherfolder/somepage");
System.out.println(string[0]);
System.out.println(string[1]);
System.out.println(string[2]);
}
private String[] parseURL(String url)
{
String part1 = url.substring("http://".length(), url.indexOf("/", "http://".length()));
String part2 = url.substring("http://".length() + part1.length() + 1, url.lastIndexOf("/"));
String part3 = url = url.substring(url.lastIndexOf("/") + 1);
return new String[] { part1, part2, part3 };
}
}
输出:
somedomain.someextention
somefolder/.../someotherfolder
somepage
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.