まあ...私はtintinスクリプトを含むファイルを持っています。今では、Rubyを使ってウェブサイト上で適切に注文されたことを示すために、すべてのアクションとその置換を取得することができました。JavaでRuby-regexパターンを書くには(再帰的な名前付きグループ化を含む)?
例TINTIN-スクリプトは
#substitution {You tell {([a-zA-Z,\-\ ]*)}, %*$}
{<279>[<269> $sysdate[1]<279>, <269>$systime<279> |<219> Tell <279>] <269>to <219>%2<279> : <219>%3}
{4}
#substitution {{([a-zA-Z,\-\ ]*)} tells you, %*$}
{<279>[<269> $sysdate[1]<279>, <269>$systime<279> |<119> Tell <279>] <269>from <119>%2<279> : <119>%3}
{2}
#action {Your muscles suddenly relax, and your nimbleness is gone.}
{
#if {$sw_keepaon}
{
aon;
};
} {5}
#action {xxxxx}
{
#if {$sw_keepfamiliar}
{
familiar $familiar;
};
} {5}
私のRubyのアプリでそれらをつかむために、私はvaribable「入力」に私のスクリプト・ファイルを読み、「入力」
をスキャンするために、次のパターンを使用しますpattern = /(?<braces>{([^{}]|\g<braces>)*}){0}^#(?<type>action|substitution)\s*(?<b1>\g<braces>)\s*(?<b2>\g<braces>)\s*(?<b3>\g<braces>)/im
input = ""
File.open("/home/igambin/lmud/lmud.tt") { |file| input = file.read }
input.scan(pattern) { |prio, type, pattern, code|
## here i usually create objects, but for simplicity only output now
puts "Type : #{type}"
puts "Pattern : #{pattern}"
puts "Priority: #{prio}"
puts "Code :\n#{code}"
puts
}
私の考えは、概要を保存するだけでなく、tintinスクリプトファイルの編集を支援するモジュールを書くためにnetbeansプラットフォームを使用することでした。エディタウィンドウでファイルを開くには、まだtintinファイルを解析し、ファイルからすべての 'アクション'と '置換'をeTableに表示して表示する必要があります。変更ウィンドウ。
私はモジュールをセットアップしてこれまでのところ準備ができていますが、私が作ったruby-regexパターンをjava-regex-patternに変換する方法は分かりません。名前付きグループキャプチャと思われます。特に、これらのグループの再帰的アプリケーションはJavaではサポートされていません。そのがなければ私はは、実用的なソリューションを見つけることができないように見える...ここ
はルビーパターンが再びです...
pattern = /(?<braces>{([^{}]|\g<braces>)*}){0}^#(?<type>action|substitution)\s*(?<b1>\g<braces>)\s*(?<b2>\g<braces>)\s*(?<b3>\g<braces>)/im
誰もが一致するJavaのパターンを作成するために私を助けることができます同じ?
ヒント/ヒント/アイデア、特にソリューションやソリューション解説に感謝します。
あなたの質問にはまったく答えられませんが、私はむしろこの種のタスクに適切なパーサー(たとえばANTLR(http://www.antlr.org))を使用します。 – Slartibartfast