2017-09-01 18 views
0

私はinputを持っており、regexpを使用して/の間のすべてを分割して抽出する必要があります。 \/\s*(\w+)ダッシュを含む単語のJava正規表現ですか?

これが生成します:

は、私が使用してみました/pathvalue1

サンプル入力:私は必要

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

出力:

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

何かヒント? 非常に感謝しています!

+3

api/java/lang/String.html#split-java.lang.String-)? –

+0

私は 'regexp'でもっと「プロフェッショナル」な作業をしているように感じています。ええ、私は知っている、最高の議論ではありません。私は 'regexp'マッチングを学ぼうとしています。 – nightfixed

+1

他の人が言ったように、あなたの質問に答えるために:\/\ s *([^ /] +) ';-) – Lothar

答えて

0

これはあなたのパスを分割し、あなたの区切り値を与える必要があり、配列

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

にあなたの文字列を分割する文字列分割機能を使用してください。

ハイフンで区切られた値も配列内にあります。

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 
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


をあなたの問題を解決することができますまた、1つのポイントだけを分割して使用するあなたはこの結果を得ることができるよりも、あなたが直接str.split("/")を分割使用する場合T:

[, pathvalue1, path-value-one] 

は、あなたが正しい結果を得ることを確認するためには、あなたが使用できるように、URLの先頭に無い便利/またはスペースを置き換えます。

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("/"))); 
} 

出力単に `/`使用[ `スプリット()`](https://docs.oracle.com/javase/8/docs/で文字列を分割しない理由

[pathvalue1, path-value-one] 
[pathvalue2, path-value] 
[pathvalue3, pathvaluethree] 
関連する問題