2011-10-21 61 views
0
StringBuilder testSB = new StringBuilder(); 
String testString = "error 1:"; 
int times = 0; 
while(times<=10){ 
    testSB.append(testString +"\n"); 
    times++; 
} 

String testResponse = "error 1:"; 
String realResponse = testSB.toString(); 

Log.i("REAL", String.valueOf(realResponse.matches(".*error.*"))); 
Log.i("TEST", String.valueOf(testResponse.matches(".*error.*"))); 

“真实”的字符串不匹配,而“测试”串一样。如果我从while代码块中删除+"\n",则它匹配正则表达式。我认为.*也适用于新生产线?Java字符串正则表达式匹配失败并换行?

+2

断行通常不是'正则表达式.'一部分。您通常需要专门告诉正则表达式来引用它们。然而,String类中的方便方法'matches()'不会允许你这样做。你很可能需要建立一个'Pattern'并从中创建一个'Matcher'。在那里你可以设置适当的标志来实现这一点。 –

+1

@Till:(?S)内联改性剂,'',在这种情况下使用(如子宫颈的答复中提到)。 –

回答

6

.默认情况下与换行符不匹配,但如果您在正则表达式的开头添加(?s)开关,它将会。

+0

在新行字符串,我不得不使用''匹配foo'“(S?)。*富(?S)。*”',就是说我不得不把它的每个'.'字符之前。 –

1

.是否匹配行终止如果MULTILINE模式被激活取决于。 请参阅关于java.util.regex.Pattern的java文档。

+0

它是你正在考虑的'DOTALL'模式,而不是'MULTILINE'。这些模式不应该存在的,他们的名字一直吸,但至少Java的改变同样混淆的名称为“单行”到一定程度,不言自明的“DOTALL”。 –