25

入力で指定された任意の文字列に一致する正規表現を作成する関数を作成したいと思います。たとえば、フィードするときは、文字列の最後ではなく、123$文字通り一致する必要があります。"123$"123

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 :(                                               

したがって、最後はテキストでfindAllIn見つかるはず\d+ですが、そうではありません。ここで何が問題になっていますか?

4

2 に答える 2

32

Java の Pattern クラスを使用して、文字列を正規表現としてエスケープできます。http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#quote%28java.lang.String%29を参照してください。

例えば:

scala> Pattern.quote("123$").r.findFirstIn("123$")
res3: Option[String] = Some(123$)
于 2012-08-02T09:27:47.200 に答える