2012-08-02 16 views
18

入力に与えられた任意の文字列に一致する正規表現を作成する関数を作成したいと考えています。たとえば、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+を見つける必要がありますが、それはしていません。ここで何が間違っていますか?

+0

あなたがしようとしていますあなたのスクリプト内に正規表現を生成するには?私はその疑問を確信しています。 Javaでは\を別の\でエスケープする必要があります。空白と一致する\\ s。スカラー言語がわからない –

+1

'' d ''(文法的に) ''テキスト ''に '' + ''が含まれていない場合、それをどのように見つけるべきですか? –

+2

@mhs:ups、typo。しかし、それはまだ動作しません。 –

答えて

4

ちょうどあなたがあなたが使用できるScalaのライブラリでこれを行うにしたい場合は、上記のハロルドL'sのコメントに多くの注意を喚起するために:

import scala.util.matching.Regex 
Regex.quote("123$").r.findFirstIn("123$") 
関連する問題