【发布时间】:2013-06-14 08:14:56
【问题描述】:
我有一个非常奇怪的 String.matches 行为:
requestString.matches(".*")
(boolean) false
而 requestString 类似于
"HTTP/1.1 200 OK - OK
[...]
内容类型:文本/xml;字符集=iso-8859-1
内容长度:1545 英寸
+ 更多...
当然,我想测试“HTTP/\\d\\.\\d 但显然这失败了八次: requestString.matches("HTTP/\\d\\.\\d")
requestString 中的字符串通过 Socket 连接进来,并以 iso-8859-1 编码发送。这是代码,
StringBuilder result = new StringBuilder();
int ch;
while ( ! timeoutExceeded() && (ch = reader.read()) != -1) {
result.append((char)ch);
}
String requestString = result.toString()
代码在 android sdk 上运行。 我错过了什么?是编码问题吗?
解决方案: 感谢提示我尝试了 DotAll 标志(再次!)并且它有效:
requestString.matches("(?s).*HTTP/\\d\\.\\d.*")
【问题讨论】:
-
注意
.matches()尝试将正则表达式应用于整个输入!这是一个巨大的陷阱...... -
请不要在问题中发布答案。答案应作为答案发布,然后选择一个作为您接受的答案。这样我们就知道您的问题得到了满足。
-
我知道,@shyam 太快了,stackoverflow 不接受我接受他的回答 :)