2017-08-17 101 views
1

我想用逗號分隔下面的字符串使用DOTALL正則表達式模式什麼將接受字母,數字,空格和特殊字符如下劃線和星號,即@input("Test_1, Test_TWO , TEST_THIRTY_3*")所以輸出看起來像:正則表達式模式字符串使用標識符

"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

你必須逃離(通過\(讓你的正則表達式應該是這樣的@input\(\"(.*?)\".*,第二你可以使用\s*,\s*分裂的結果是這樣的:

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

如果你沒有堅持到正則表達式,你可能只是把字符串的方法。

List<String> output = Arrays.asList(line.split(",")); 
+0

感謝您的建議,但我試圖識別的字符串存儲在另一個字符串中,所以我需要使用開始標記@input(「和雙引號的結束標記」 – Orby

+0

@Orby @Orby,你可以使用正則表達式模板首先使用正則表達式(或子字符串)在'@input(「''''''和'string.split(」,「)'之間提取數據以提取各個值 – Olian04

相關問題