2016-11-25 11 views
0

私はmarkdownと同様の入力を受け入れ、XDPコンテンツ(PDFコンテンツのためのAdobe XML表現)を出力するXSLT 2.0のスタイルシートを構築しています。XSLTでregexを構成してエンティティ参照と一致しないようにするには?

*や[などの特殊文字を許可するには、入力に\ *または\ [、それぞれエンコードできます。

マークダウンを処理する前に、そのようなエスケープシーケンスをエンティティリファレンスに変換しています。 \ *〜* \ [to &#91]であり、リテラル*や[文字など]とのマッチングが必要な正規表現では一致しないようにしています。

を編集します。私は問題が[と]であると思ったが、指摘したように、エンティティとしてのエンコーディングは私が思ったようにうまくいかず、同じようにマッチする。

おそらく、このような値を二重にエンコードすることを検討しています。たとえば、\ *を& amp ;#42に置き換えます。

XSLT出力では、この二重エンコーディングを削除する方法があるので、*と出力されます。

regex="\*(.+?)\1" 

最終\1がされている必要があることを別の\*

+1

私は、エンティティやアンパサンドを含むもののほか明確な舵取りでしょう。競合する条約と矛盾しない他の多くの選択肢があります。 \ *を§42で置き換えます。 –

+0

ありがとうございます。私はそれについてさらに考えていて、同じ結論に達しました。 – dave

答えて

1

あなたの不一致の正規表現文字列に誤りがあります。予期される出力を示す修正

0

マイケル・ケイが示唆しているように、解決策にはエンティティとアンパサンドに関する何かを避けることが必要です。入力で

§(\d+)§ような式戦、その後、一致出力用の文字列は、コードポイントに対応:

<xsl:sequence select="codepoints-to-string(xs:integer(regex-group(1)))" /> 
関連する問題