Java Regex包括破折号?

时间:2017-09-01 14:58:20

标签: java regex

我有一个input,需要使用Strings/之间拆分并提取所有regexp

我尝试使用:\/\s*(\w+)

这会产生:/pathvalue1

示例输入:

/pathvalue1/path-value-one /pathvalue2/path-value /pathvalue3/pathvaluethree

我需要的输出:

pathvalue1 path-value-one pathvalue2 path-value pathvalue3 pathvaluethree

任何提示? 非常感谢!

3 个答案:

答案 0 :(得分:0)

使用String split函数将字符串拆分为数组

String[] yourarray = Yourstring.split("/");

这应该分开你的路径并给你你的分离值。

您也可以在数组中找到连字符分隔值。

答案 1 :(得分:0)

我会使用分裂方法,因为Kushan在他的回答中指出。但是,如果你仍然想使用正则表达式,那么你可以使用这样的正则表达式:

([\w-]+)  or
([a-z-]+) with insensitive flag

<强> Working demo

Java代码

String text = "/pathvalue1/path-value-one\n" +
              "/pathvalue2/path-value\n" +
              "/pathvalue3/pathvaluethree";

Matcher m = Pattern.compile("([\\w-]+)").matcher(text);

while (m.find()) {
    System.out.println(m.group(1));
}

<强> IdeOne working demo

输出

pathvalue1
path-value-one
pathvalue2
path-value
pathvalue3
pathvaluethree

答案 2 :(得分:0)

如果你坚持使用正则表达式,你可以使用这个[^/\\s]+这样的模式:

String[] strs = new String[]{"/pathvalue1/path-value-one",
    "/pathvalue2/path-value",
    "/pathvalue3/pathvaluethree"};
String regex = "[^/\\s]+";
for (String str : strs) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);

    while (matcher.find()) {
        System.out.println(matcher.group());
    }
}

输出

pathvalue1
path-value-one
pathvalue2
path-value
pathvalue3
pathvaluethree

regex demo

如果你直接使用拆分str.split("/"),你可以使用拆分一个点来解决你的问题,而不是你可以得到这个结果:

[, pathvalue1, path-value-one]

要确保获得正确的结果,请在网址的开头替换no usefull /或空格,以便您可以使用:

String[] strs = new String[]{"/pathvalue1/path-value-one",
    "/pathvalue2/path-value",
    "/pathvalue3/pathvaluethree"};
for (String str : strs) {
    System.out.println(Arrays.toString(str.replaceAll("^[/\\s]", "").split("/")));
}

输出

[pathvalue1, path-value-one]
[pathvalue2, path-value]
[pathvalue3, pathvaluethree]