Java正则表达式:删除字符最后一个实例之后的所有内容
假设我有一个字符串:Java正则表达式:删除字符最后一个实例之后的所有内容,java,regex,Java,Regex,假设我有一个字符串: /first/second/third 我想删除/的最后一个实例之后的所有内容,因此我将以以下方式结束: /first/second 我将使用什么正则表达式?我试过: String path = "/first/second/third"; String pattern = "$(.*?)/"; Pattern r = Pattern.compile(pattern2); Matcher m = r.matcher(path); if(m.find()) path =
/first/second/third
我想删除/的最后一个实例之后的所有内容,因此我将以以下方式结束:
/first/second
我将使用什么正则表达式?我试过:
String path = "/first/second/third";
String pattern = "$(.*?)/";
Pattern r = Pattern.compile(pattern2);
Matcher m = r.matcher(path);
if(m.find()) path = m.replaceAll("");
你是说像这样吗
s = s.replaceAll("/[^/]*$", "");
如果您使用的是路径,则更好
File f = new File(s);
File dir = f.getParent(); // works for \ as well.
如果您有一个包含字符的字符串(无论是否为补充代码点),则可以使用
模式。quote
并将反向字符设置匹配到末尾,因此:
String myCharEscaped = Pattern.quote(myCharacter);
Pattern pattern = Pattern.compile("[^" + myCharEscaped + "]*\\z");
应该这样做,但实际上您可以像中一样使用lastIndexOf
myString.substring(0, s.lastIndexOf(myCharacter) + 1)
要将代码点作为字符串获取,只需执行以下操作
new StringBuilder().appendCodePoint(myCodePoint).toString()
为什么在这里使用正则表达式?查找带有的最后一个
/
字符。如果找到了,那么使用它来提取之前的所有内容。尽管答案避免了正则表达式模式和匹配器,但它对性能(编译模式)很有用,而且它仍然非常简单,值得掌握。:)
我不知道为什么你要预付“$”。尝试以下任一方法:
String path = "/first/second/third";
String pattern = "^(.*)/"; // * = "greedy": maximum string from start to last "/"
Pattern r = Pattern.compile(pattern2);
Matcher m = r.matcher(path);
if (m.find()) path = m.group();
String path = "/first/second/third";
String pattern = "/(.*?)$)/"; // *? = "reluctant": minimum string from last "/" to end
Pattern r = Pattern.compile(pattern2);
Matcher m = r.matcher(path);
if (m.find()) path = m.replace("");
+1,不过,我认为OP想要提取它之前的一切。@damo你是对的;我已经更新了我的答案(和子字符串链接)。我想你的意思是
replaceAll
。@arshajii是的,replace()不做正则表达式。