2012-08-02 14 views
18

Chciałbym utworzyć funkcję, która tworzy wyrażenie regularne pasujące do dowolnego ciągu podanego na wejściu. Na przykład, gdy karmię go numerem 123$, powinien on być zgodny z literą "123$", a nie 123na końcu ciągu.Łańcuch ucieczki do przekazania jako 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 :(            

Więc ostatni findAllIn powinien znaleźć \d+ w tekście, ale tak nie jest. Co jest nie tak?

+0

Starasz wygenerować wyrażenie regularne w swoim skrypcie? Nie jestem pewien tego pytania. W Javie musisz uciec \ z innym \ np. dopasuj spacje \\ s. Nie jestem pewien języka scala. –

+1

Jak powinien znaleźć '' \ d + '' (syntaktycznie) w '' tekście'', gdy ten ostatni nie zawiera '' + ''? –

+2

@mhs: ups, literówka. Ale nadal nie działa. –

Odpowiedz

4

Wystarczy przynieść większą uwagę na Harolda L's komentarzu powyżej, jeśli chcesz to zrobić z biblioteki Scala można użyć:

import scala.util.matching.Regex 
Regex.quote("123$").r.findFirstIn("123$") 
Powiązane problemy