簡易版 Boost.Xpressive、Boost.Spirit の正規表現対応表
以前、Boost.Xpressive と Boost.Spirit の速度比べをした際にちょっと調べたのでまとめておこう。
この書き方しかないわけではないので、もっと実行効率のいいルールを探すのもいいかもね。
ただ、Boost.Spirit は網羅的なマッチングをしないので要注意*1。
正規表現 | Xpressive | Spirit |
---|---|---|
a (文字としての 'a') | as_xpr('a') | char_('a') li_("a") |
abc (文字列としての "abc") | as_xpr("abc") | li_("abc") |
. | _ | char_ |
ab | a >> b | a >> b |
a¦b | a ¦ b | a ¦ b |
a* | *a | *a |
a+ | +a | +a |
a? | !a | -a |
a{n,m} | repeat |
repeat(n,m)[a] |
[0-9] | range('0','9') | char_('0','9') |
[abc] | as_xpr('a') ¦ 'b'¦ 'c' (set='a','b','c') |
char_('a') ¦ 'b' ¦ 'c' |
[0-9abc] | set[ range('0','9') ¦ 'a' ¦ 'b' ¦ 'c' ] set[ range('0','9') ¦ (set= 'a','b','c') ] |
char_('0', '9') ¦ 'a' ¦ 'b' ¦ 'c' |
[^abc] | ~(set= 'a','b','c') | char_ - (char_('a') ¦ 'b' ¦ 'c') |
a(ba)* | a >> *(b >> a) | a % b |
a ¦ b ¦ ab | a ¦ b ¦ (a >> b) | a ¦¦ b |