好吧...我有一个包含 tintin-script 的文件。现在我已经设法从中获取所有操作和替换,以使用 Ruby 在网站上正确排序显示它们,这有助于我保持概览。
示例 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-App 中获取它们,我将脚本文件读入变量“输入”,然后使用以下模式扫描“输入”
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
}
现在我的想法是使用netbeans平台编写一个模块,不仅可以保持概述,还可以帮助编辑tintin脚本文件。因此,在编辑器窗口中打开文件我仍然需要解析 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模式?
非常感谢提示/提示/想法,特别是解决方案或(接近解决方案的评论)!