在我的程序中,我有一个字符串(从外部库中获取),它与任何正则表达式都不匹配.
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
Run Code Online (Sandbox Code Playgroud)
知道什么可能是错的吗?当我打印content
到stdout时,它看起来不错.
以下是从PDF中提取文本的代码(我使用的是iText 5.0.1):
PdfReader reader = new PdfReader(source);
PdfTextExtractor extractor = new PdfTextExtractor(reader,
new SimpleTextExtractingPdfContentRenderListener());
return extractor.getTextFromPage(1);
Run Code Online (Sandbox Code Playgroud)
Bar*_*ers 34
默认情况下,.
与换行符不匹配.所以我猜你的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
Run Code Online (Sandbox Code Playgroud)
在(?s)
最后一个例子将导致.
匹配换行符也是如此.所以(?s).*
会匹配任何字符串.