2017-08-17 80 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