string.matches(“。*”)返回false

在我的程序中,我有一个字符串(从外部库中获取),它与任何正则表达式都不匹配。

String content = // extract text from PDF assertTrue(content.matches(".*")); // fails assertTrue(content.contains("SPECIAL")); // passes assertTrue(content.matches("SPECIAL")); // fails 

知道什么可能是错的吗? 当我将content打印到stdout时,它看起来没问题。

以下是从PDF中提取文本的代码(我使用的是iText 5.0.1):

 PdfReader reader = new PdfReader(source); PdfTextExtractor extractor = new PdfTextExtractor(reader, new SimpleTextExtractingPdfContentRenderListener()); return extractor.getTextFromPage(1); 

默认情况下. 与换行符不匹配。 所以我的猜测是你的content包含一个换行符。

另请注意, matches将匹配整个字符串,而不仅仅是其中的一部分:它不会执行contains

一些例子:

 String s = "foo\nbar"; System.out.println(s.matches(".*")); // false System.out.println(s.matches("foo")); // false System.out.println(s.matches("foo\nbar")); // true System.out.println(s.matches("(?s).*")); // true 

最后一个例子中的(?s)将导致. 也可以匹配换行符。 所以(?s).*将匹配任何字符串。