¿Cómo crear una expresión regular sin procesar en Scala?

Digamos que tengo una cadena que tiene caracteres, pero no lo sé hasta el tiempo de ejecución.

val s: String = "/+*à&ç"

¿Cómo puedo convertir esta cadena en una expresión regular para que se escapen todos los caracteres especiales?

Por ahora, intentar esto falla:

s.r.findFirstIn("What the /+*à&ç is this PatternSyntaxException?")

con el error:

java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 2

en lugar de devolver el partido.

preguntado el 03 de diciembre de 13 a las 13:12

¿Qué tal el enfoque sugerido por esta respuesta? Es decir Pattern.quote or \Q y \E. -

De hecho, gracias por esta respuesta. -

1 Respuestas

Puede haber un método de tipo Scala para eso, pero el siguiente java funciona.

import java.util.regex.Pattern
Pattern.quote(s).r.findFirstIn("What the /+*à&ç is this PatternSyntaxException?")

devoluciones

res1: Option[String] = Some(/+*à&ç)

Respondido el 03 de diciembre de 13 a las 13:12

StringLike tiene replaceAllLiterally que cita. Es interesante preguntarse qué método agregar para su caso de uso. s.q? s.r.quoted? Claramente no s.findFirstInLiterally ¡etc! - som-snytt

Para mí, necesitaba encontrar todos los lugares en los que se produjo la subcadena. Entonces, si hubiera algo como s.rquote, sería útil. - mikaël mayer

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.