Aquí está el problema: al usuario se le presenta un campo de texto, al cual puede teclear el filtro . Un filtro para filtrar datos no filtrados. El usuario, al experimentar un lavado de cerebro de Oracle Forms, no admite caracteres especiales que no sean%, lo que supongo que representa más o menos ". * * Regex en Java.Cómo escapar de todos los caracteres especiales Regex pero no de todos a la vez (por Pattern.quote()), solo uno por uno
Si la persona del usuario se comporta bien, determinada persona se escriba cosas como "CTHULH%", en cuyo caso se me permite construir un patrón:
Pattern.compile(inputText.replaceAll("%", ".*"));
pero si la persona usuario es oriundo de Innsmouth, insuperablemente haré se escribe "+ \ [a - # $%^& * (." destruir mi esquema con unas pocas pulsaciones de teclas simples Esto no funcionará:
Pattern.compile(Pattern.quote(inputText).replaceAll("%", ".*"));
ya que pondrá \ Q al principio y \ e. al final de la Cadena, renderizando mi% ->. * cambio irrelevante.
La pregunta es: ¿tengo que buscar cada carácter especial en el código de patrón y escapar de él mismo agregando "\\" al frente, o puede hacerse esto automágicamente? ¿O estoy tan metido en el problema, estoy omitiendo alguna forma obvia de resolución?
+1 Pero no estoy seguro de que la documentación del método 'quote' * garantice * que una cadena siempre estará rodeada por' \ Q' y '\ E' (solo dice" Este método produce una cadena que puede se usará para crear un Patrón que coincida con la cadena s como si fuera un patrón literal. "). Aunque en la práctica creo que todas las impedancias actuales de Java usan el enfoque '\ Q ... \ E' para lograr esto. –
@Thomas disculpe la pregunta de novato: ¿cuál es la costumbre aquí? ¿Borro mis comentarios cuando actualizas la respuesta? –
@pafauk. Hmm, no estoy seguro, pero si los comentarios no proporcionan ninguna información adicional (que creo que es cierto de nuestros comentarios ahora), los eliminaría para mantener la publicación clara. Comenzaré y borraré mis comentarios anteriores. – Thomas