2012-08-02 13 views
18

Me gustaría crear una función que cree expresiones regulares que coincidan con una cadena arbitraria dada en la entrada. Por ejemplo, cuando lo publico con 123$ debe coincidir literalmente con "123$" y no con 123al final de la cadena.Cadena de escape que se pasará como regex

def convert(xs: String) = (xs map (x => "\\"+x)).mkString     

val text = """ 123 \d+ 567 """             
val x = """\d+"""                
val p1 = x.r                 
val p2 = convert(x).r               

println(p1.toString)              
    \d+ // regex to match number            

println((p1 findAllIn text).toList)          
    List(123, 567) // ok, numbers are matched         

println(p2.toString)              
    \\\d\+ // regex to match "backshash d plus"         

println((p2 findAllIn text).toList)          
    List() // nothing matched :(            

Así que la última findAllIn debe encontrar \d+ en el texto, pero no es así. ¿Qué pasa aquí?

+0

¿Estás tratando para generar una expresión regular dentro de tu script? No estoy seguro de la pregunta. En Java, debe escapar \ con otra \ e.g. coincide con el espacio en blanco \\ s. Inseguro del lenguaje scala. –

+1

¿Cómo debería encontrar '' \ d + '' (sintácticamente) en '' text'' cuando este último no contiene un '' + ''? –

+2

@mhs: ups, error tipográfico. Pero todavía no funciona. –

Respuesta

4

sólo para traer más atención a los comentarios de Harold L's anterior, si usted quiere hacer esto con una biblioteca Scala puede utilizar:

import scala.util.matching.Regex 
Regex.quote("123$").r.findFirstIn("123$") 
Cuestiones relacionadas