ruby Treetop ライブラリを使用してスクリプトを開発していますが、正規表現の構文で問題が発生しています。まず、他の設定で機能する正規表現の多くは、treetop では同じようには機能しません。
これは私の文法です: (myline.treetop)
文法マイライン 罫線 文字列空白条件 終わり ルール文字列 [\S]* 終わり ルール空白 [\s]* 終わり ルール条件 「新しい」/「古い」/「中古」 終わり 終わり
これは私の使用法です: (usage.rb)
「ルビジェム」が必要 「梢」が必要 「多言語」が必要 「マイライン」が必要 パーサー = MyLineParser.new p parser.parse("新しいランダム文字列")
これにより、新しい単語が確実に検出されるはずです。入力文字列が「randomstring anotherstring new yetanother andanother」になり、ルール条件の正規表現の前後に任意の数の文字列の後に空白 (タブを含む) が続く場合に新しいものを見つけることができるように拡張するつもりはありません。つまり、「new」などの単語を含む文を渡すと、一致するはずです。
では、文法を次のように変更するとします。
罫線 文字列空白条件空白文字列 終わり
次に、次の一致を見つけることができるはずです。
p parser.parse("randomstring new anotherstring")
では、条件の前後に文字列の空白を繰り返せるようにするにはどうすればよいでしょうか? これを書き込もうとすると:
罫線 (文字列空白)* 条件 (空白文字列)* 終わり
、無限ループに入ります。上記の () を [] に置き換えると、nil が返されます。一般に、正規表現は上記を使用すると一致を返しますが、ツリートップの正規表現は一致しません。これについてのヒントやポイントはありますか?さらに、treetop のドキュメントはあまりなく、例は単純すぎるか複雑すぎるため、treetop のより完全なドキュメント/ガイドを知っている人はいますか?