0

XSLT 2.0 を使用して XML 変換中に特定の文字列を分割する正規表現を作成しました。

(@VAL)((.+?)(?=@VAL|$))

この正規表現は、以下と同じ形式の文字列に適用されます。

@VAL@TEST1@1111@'Ceci est un texte'@VAL@TEST2@2222@'This is a text'@VAL@TEST3@3333@'Encore du texte'

@VAL で始まり、次の @VAL まですべてを抽出します ( ?= 構文についての説明は、そこを参照してください)。したがって、この例では、正規表現の結果は次の 3 つの文字列を提供します。

  • @VAL@TEST1@1111@'Ceci est un texte'
  • @VAL@TEST2@2222@'これはテキストです'
  • @VAL@TEST3@3333@'Encore du texte'

残念ながら、このオンライン正規表現テスターでうまく機能したとしても、変換を実行すると次のエラーが発生します。

XTDE1140: 正規表現のエラー: net.sf.saxon.trans.DynamicError: 正規表現の文字 11 でエラーが発生しました "(@VAL)(.+?(?=@VAL|$))": expected ()) Failed toスタイルシートをコンパイルします。1 件のエラーが検出されました

では、この正規表現の問題は何ですか? 文字 11 で閉じ括弧が必要な理由がわかりません。

どんな助けでも大歓迎です。

PS: 私は saxon8 XSLT プロセッサを使用しています

4

2 に答える 2

0

追加の説明をありがとう。ゼロ幅の先読みがなければ、これに取り組むには 2 つの方法があると思います。

(a) セパレータとして「@VAL」を使用してトークン化し、各トークンの前に「@VAL」を追加しなければならないという事実を受け入れます。

(b) 最初に "@VAL" を "§@VAL" に置き換えてから、"§" を区切り記号としてトークン化します。

于 2013-06-26T13:12:37.667 に答える
0

XSD/XPath 正規表現言語では、"(?=".

正直なところ、調べてみないと意味が思い出せないので、あなたが何を達成しようとしているのか正確にはわかりません。失敗した解決策ではなく、問題を説明すれば、有用な答えが得られる可能性が高くなります。

于 2013-06-26T11:01:07.817 に答える