Javaとその正規表現クラス、特にPatternとMatcherで翻訳してきた利用可能なWiktionaryデータダンプダウンロードを使用しようとしていますが、かなりの成功を収めています。
私の主な関心事である単語定義ダンプは、未加工の wiki マークアップにあります。これは、html や xml などではなく、独自の独自の形式です。さまざまな要素がありますが、最も扱いにくいのはテンプレートです。
私が思いついたのは、位置フィールドを持つ特定のテンプレートと、任意の順序で表示できるオプションのテンプレートです。私は正規表現を考え出すことができました。これはほとんど仕事をしますが、フィールドが入れ替わったり、オプションで省略されたりするすべてのインスタンスを処理するには十分ではありません。
このことから、出現順序が単なるシーケンスよりも洗練されている場合、正規表現グループの位置を指定する方法がわからないことに気付きました。
これらの複雑なテンプレートの 1 つの例は、次のページに記載されている「term」のテンプレートです: http://en.wiktionary.org/wiki/Template:term
正規表現での私の最善の刺し傷 (今のところ、文字列を Java 互換にするために必要な余分なエスケープ文字を省略しています) は次のとおりです。
\{\{term\|(.+?)(?:\|(.*?))?(?:\|([\w, -]+?))?(?:\|lang=([\w-]+?))?(?:\|sc=(\w+?))?(?:\|tr=([\w, -]+?))?(?:\|pos=(\w+?))?(?:\|lit=([\w, -]+))?\}\}
これは、次のような用語テンプレートの実際の例で機能します。
{{term|λόγος|logos|word|lang=grc}}
{{term|verbum|verbō|for the word|lang=la}}
{{term|*bʰer-||to carry|lang=ine-pro}}
{{term|alternative lifestyle|lang=en}}
{{term|שוין||already|lang=yi|tr=shoyn}}
{{term|Bögge||goblin, snot|lang=nds}}
{{term|as}}
ただし、次の場合は正しく機能しません。
{{term|deus ex māchinā||device|pos=n|lit=god from a device|lang=la}}
{{term|ри̏ба||fish|tr=rȉba|sc=Cyrl|lang=sh}}
{{term|שוין|lang=yi|tr=shoyn}}
{{term|lang=en|vocational}}
一部のグループが位置的であり、一部のグループが特定の順序で任意に表示されるのではなく、ランダムに表示されるように指定する方法が必要です。これは、たとえば、多くの HTML 要素を処理する場合によくある問題です。この洗練された位置に対処するための正規表現の書き方について、アドバイスをいただければ幸いです。本当にありがとう!– ジェフ。