2017-08-17 16 views
1

DOTALL正規表現パターンを使用して次の文字列をコンマで区切ります。文字、数字、空白、下線やアスタリスクなどの特殊文字を受け入れるものは@input("Test_1, Test_TWO , TEST_THIRTY_3*")です。あなたは単なる文字列の方法を取るかもしれないとregexに固執する必要がない場合識別子を使用して文字列内の単語を分割するための正規表現パターン

"Test_1", 
"Test_TWO", 
"TEST_THIRTY_3*" 

public static void main(String args[]) 
{ 
    String line = "@input(\"Test_1,Test_TWO , TEST_THIRTY_3*\"\\)\"; 
    String pattern = "@input(\"(.*?)\".*"; 
    Pattern r = Pattern.compile(pattern, Pattern.DOTALL); 
    Matcher m = r.matcher(line); 
    while (m.find()) { 
     System.out.println("Found word: " + m.group(1)); 
    } 
+1

'Pattern.DOTALL'は、通常、行終端文字をドットとマッチさせるために使用されます - ほとんどの文字が既に一致していなければそのオプションは必須です。これは、正確にあなたの質問は何ですか? – Mena

+0

上記のパターンを修正して、二重引用符を行終端記号として使用したいと考えています。 – Orby

答えて

1

String line = "@input(\"Test_1,Test_TWO , TEST_THIRTY_3*\"\\)"; 
String pattern = "@input\\(\"(.*?)\".*"; 
Pattern r = Pattern.compile(pattern, Pattern.DOTALL); 
Matcher m = r.matcher(line); 
while (m.find()) { 
    System.out.println(Arrays.toString(m.group(1).split("\\s*,\\s*"))); 
    //----------------------------------------------------^^^^^^^^ 
} 

出力

[Test_1, Test_TWO, TEST_THIRTY_3*] 
+1

ありがとう、できます! – Orby

0

:次のようになります。

あなたはとてもあなたの正規表現が二あなたがこのような結果を分割する \s*,\s*を使用することができ、この @input\(\"(.*?)\".*のようになります \((をエスケープする必要が
List<String> output = Arrays.asList(line.split(",")); 
+0

提案していただきありがとうございますが、私が識別しようとしている文字列は別のStringに格納されているので、開始タグ@input( "と二重引用符の終了タグ" – Orby

+0

@Orbyを使用して正規表現paternを使用する必要があります@input(と '' 'と' 'string.split("、 ")'の間でデータを抽出して個々の値を抽出する最初の正規表現(または部分文字列) – Olian04

関連する問題