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

2022-09-02 03:32:30

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

String content = // extract text from PDF
assertTrue(content.matches(".*")); // fails
assertTrue(content.contains("S P E C I A L")); // passes
assertTrue(content.matches("S P E C I A L")); // fails

任何想法可能是什么问题?当我打印到标准输出时,它看起来还行。content

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

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

答案 1

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

另请注意,它将匹配整个字符串,而不仅仅是它的一部分:它不做什么!matchescontains

一些例子:

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).*


答案 2