5

いくつかの文字列があります:

111/aaa
111/aaa|222/bbb

それらは表現の形をしています:

(.*)/(.*)(|(.*)/(.*))?

私はそれを使用して文字列を照合し、値を抽出しようとしました:

var rrr = """(.*)/(.*)(|(.*)/(.*))?""".r

"123/aaa|444/bbb" match {
    case rrr(pid,pname, cid,cname) => println(s"$pid, $pname, $cid, $cname")
    case _ => println("not matched ?!")
}

しかし、それは印刷します:

not matched ?!

そして、私は取得したい:

123, aaa, 444, bbb

修正方法は?


アップデート

@BartKiers と @Barmar の anser に感謝します。正規表現にいくつかの間違いがあることがわかり、最終的にこの解決策を見つけました。

var rrr = """(.*?)/(.*?)([|](.*?)/(.*?))?""".r

"123/aaa|444/bbb" match {
    case rrr(pid,pname, _, cid,cname) => println(s"$pid, $pname, $cid, $cname")
    case _ => println("not matched ?!")
}

_動作しますが、実際には役に立たない があることがわかります。rrr(pid,pname,cid,cname)それに一致するように書くことができる正規表現を再定義する方法はありますか?

4

2 に答える 2

3

|正規表現の論理 OR であるをエスケープしてみてください。

var rrr = """(.*)/(.*)(\|(.*)/(.*))?""".r
于 2013-07-05T06:58:41.390 に答える