java - String.matches 每次测试都失败?

标签 java regex string

我的 String.matches 有一个非常奇怪的行为:

requestString.matches(".*")
    (boolean) false

而 requestString 类似于

"HTTP/1.1 200 OK - OK
[...]
Content-Type: text/xml; Charset=iso-8859-1
Content-Length: 1545"
+ more...

当然,我想针对“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.*")

最佳答案

首先,参见here .

其次,默认情况下,点匹配换行符。由于您的输入是多行,这意味着正则表达式无法匹配。

您必须使用Pattern并使用Pattern.DOTALL进行编译:

final Pattern p = Pattern.compile(".*", Pattern.DOTALL);
p.matcher(anything).matches(); // always returns true

插图:

public static void main(final String... args)
{
    final String input = "a\nb";
    System.out.println(input.matches(".*"));
    System.out.println(Pattern.compile(".*", Pattern.DOTALL)
        .matcher(input).matches());
}

结果:

false
true

关于java - String.matches 每次测试都失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17104012/

相关文章:

c++ - 从相同的硬编码字符串文字初始化 std::string 和 std::wstring

java - 软键盘覆盖底部工作表对话框

java - 从 MATLAB 运行 JavaScript 命令以获取 PDF 文件

java - 对象关系和类关系?

c# - Regex.Matches 没有捕获我需要的整个组

c# - 在 XML 格式的字符串中更新 "IDs"的快速而肮脏的方法 (C#)

java - 是否可以使用 Capybara 测试 Java 应用程序?

javascript - 使用正则表达式验证特定范围

c# - 用于匹配重复的连续标点符号的正则表达式,但 3 个句点除外

android - Android中的Arraylist按多个字符串排序