0

別のモデルから生成された xml 文字列が渡されます。xml タグのテキストに & などの特殊文字が含まれている場合があります。
例えば

<entry>
 <key>state</key>
 <value xsi:type="xs:string">ADDDRESS  3 & ADDR 4, 12345, HONG KONG</value>
</entry>

文字列から xml を作成すると、無効な文字エラーが発生するため、特殊文字をエスケープする必要があります&。正規表現を使用してタグの間
を見つけ、 いくつか試してみましたが、正規表現で失敗しました。&<value></value>&amp;

誰でも正規表現に関する手がかりを教えてもらえますか?

その上、私はJava 1.6を使用しています

4

2 に答える 2

3

先読みを使用できます:

交換

&(?!\w*;)(?=[^<]*</value>)

&amp;

これは、2 つの先読みを指定することで機能します。最初の先読み(?!\w*;)は、有効な HTML エスケープ シーケンスが一致するのを防ぎます。2 番目の先読み(?=[^<]*</value>)は、タグがテキストの後に続く必要があることを指定し</value>ます (非 XML タグ コンテンツの後に)。

ここで試してみてください。

于 2013-08-20T03:13:12.933 に答える
2

一般的に言えば、XML 処理では適切な構文解析を行うために文脈依存の文法が必要です。これは計算上、正規表現の能力を超えています。

DFA が適切に解析できない例としては、次のようなものがあります。

<value xsi:type="xs:string"><value>ADDDRESS  3 & ADDR 4, 12345, HONG KONG</value></value>

DFA は常に戻ってくるため、

<value>ADDDRESS  3 & ADDR 4, 12345, HONG KONG
(or possibly)
""

一方、プッシュダウン オートマトンは (コンテキストに応じて) 2 つの値を返す可能性があります。

<value>ADDDRESS  3 & ADDR 4, 12345, HONG KONG</value>
ADDDRESS  3 & ADDR 4, 12345, HONG KONG

つまり、バグが好きでない限り、正規表現を使用して XML を解析しないでください。そして、バグとは、つまり、修正するのが非常に難しいバグであり、とにかく正規表現を使用しないようにすべてを書き直す必要があります。

于 2013-08-20T03:42:02.470 に答える