如何解决正则表达式将第一个从“/token1/token2/token3”中分离出来
我对正则表达式很不熟悉,但我需要提取以下字符串的第一个标记:
输入:/token1/token2/token3
所需输出:/token1
我试过了:
List<String> connectorPath = Splitter.on("^[/\\w+]+")
.trimResults()
.splitToList(actionPath);
对我不起作用,有什么想法吗?
解决方法
可以匹配而不是拆分
^/\\w+
或者如果字符串有 3 个部分,则对第一部分使用捕获组。
^(/\\w+)/\\w+/\\w+$
Java 示例
Pattern pattern = Pattern.compile("^/\\w+");
Matcher matcher = pattern.matcher("/token1/token2/token3");
if (matcher.find()) {
System.out.println(matcher.group(0));
}
输出
/token1
,
您可以使用 /
正则表达式在不在字符串开头的 (?!^)/
上拆分:
String[] res = "/token1/token2/token3".split("(?!^)/");
System.out.println(res[0]); // => /token1
参见 Java code demo 和 regex demo。
-
(?!^)
- 匹配不在字符串开头的位置的负前瞻 -
/
- 一个/
字符。
使用番石榴:
Splitter splitter = Splitter.onPattern("(?!^)/").trimResults();
Iterable<String> iterable = splitter.split(actionPath);
String first = Iterables.getFirst(iterable,"");
,
你把它复杂化了。
试试下面的正则表达式:^(\/\w+)(.+)$
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PathSplitter {
public static void main(String args[]) {
String input = "/token1/token2/token3";
Pattern pattern = Pattern.compile("^(\\/\\w+)(.+)$");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println(matcher.group(1)); // /token1
System.out.println(matcher.group(2)); // /token2/token3
} else {
System.out.println("NO MATCH");
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。