java - regular - s+/
string.matches(".*") devuelve falso (1)
En mi programa, tengo una cadena (obtenida de una biblioteca externa) que no coincide con ninguna expresión regular.
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
¿Alguna idea de lo que podría estar mal? Cuando imprimo content
a la salida estándar, se ve bien.
Aquí está el código para extraer texto del PDF (estoy usando iText 5.0.1):
PdfReader reader = new PdfReader(source);
PdfTextExtractor extractor = new PdfTextExtractor(reader,
new SimpleTextExtractingPdfContentRenderListener());
return extractor.getTextFromPage(1);
Por defecto, el .
no coincide con los saltos de línea. Así que mi conjetura es que su content
contiene un salto de línea.
También tenga en cuenta que las matches
coincidirán con toda la cadena, no solo una parte de la misma: ¡no hace lo que contains
!
Algunos ejemplos:
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
Los (?s)
en el último ejemplo causarán el .
para que coincida con los saltos de línea también. Entonces (?s).*
Coincidirá con cualquier cadena.