0

&プレーンテキストに存在するものと一致させる必要がありますが、次の&ようなエンティティからをキャプチャするべきではありませんi

例えば、

hi this is a plain text containing & and the entity E , & and &

&上記のテキストでは、テキスト内にあるもの、つまり。の後に来るものだけを見つける必要がありますcontaining。このパターンを試しまし&[^#x]*たが、すべての一致を取得できませんでした。

4

2 に答える 2

4

先読みと組み合わせた別の回答からの HTML エンティティと一致する盗まれた正規表現:

&(?!(amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|
     \#[1-9]\d{1,3}|[A-Za-z][0-9A-Za-z]+);)

短縮:

&(?!(\#[1-9]\d{1,3}|[A-Za-z][0-9A-Za-z]+);)

説明:

一致させたいが一致させたく&ない&123;など

&                 // match an ampersand
(                 // group starts
    ?!            // negative look-ahead (don't match '&' if this group matches)
    (\#[1-9]\d{1,3}|[A-Za-z][0-9A-Za-z]+); // regex to match HTML entity after '&'
)                 // group ends
于 2012-08-23T11:01:49.667 に答える
0

「#」でも「x」でもないすべての単一文字に[^#x]一致します。おそらく欲しいのは. 文字列の末尾に「&」がある場合、または文字列が 3 文字より短い場合は、これらのケースをさらに考慮する必要があります。&[^#][^x]

PS:エスケープは、正規表現の実際のフレーバーに依存します。

編集

(および=&ampなどの他のすべての HTML エンティティ)の場合は、単純に代替手​​段を提供できます。 !!&([^#][^x])|([^a][^m][^p])|([^e][^x][^c][^l])

正規表現のフレーバーが先読みアサーションを許可する場合、使いやすくなります&(?!(#x|amp|excl))

于 2012-08-23T07:39:49.237 に答える