0

基本的に、閉じた <p> タグの一部ではない HTML の / に一致する必要があります。これは私がこれまでに得たものですが、実際には期待どおりに機能せず、しばらく試してみました.

((?<!(p))\/(?!(>))) | ((?<!(<))\/(?!(p)))

Javaで動作するには正規表現も必要です。

例として:

<div>テスト</div> <span>テスト</span> <p>何か<p/> </p>

末尾/のタグ以外は全部一致させたい!<p>

4

2 に答える 2

0
/(?!p)

これはうまくいくようです。しかし、質問が何であるかわかりません。

<div>test</div> <span>test</span> <p>something<p/> </p>
matches:  /                /                    /
于 2013-10-08T13:59:12.387 に答える
0

幸いなことに、Java は後読みと先読みの両方をサポートしています (対照的に、私がほとんどの時間を費やしている言語である JavaScript は先読みのみをサポートしています)。

したがって、探しているパターンは次のとおりです。

(?<!<p)/(?!p>)

<pこのパターンは、前に aも後ろにも a がないスラッシュに一致しp>ます。したがって<p/>、同様に除外します</p>

先読み/後読みアサーション (「ゼロ幅」アサーションと呼ばれることが多い) は、実際には一致に含まれていません。基本的に、一致させようとしているものの前に (後読み) または後 (後読み) の部分式があると主張します。この場合、否定的なアサーションを使用しています (前に付けない/後に付けない)。

正規表現を使用して HTML を解析することは、トリッキーな作業です。ある回答が指摘したように、HTML はコンテキストフリーであるため、HTML で完全に解析することはできず、一致を混乱させる HTML の可能性が残されています。不適切な形式の HTML から始めることさえやめましょう。

ただし、空のタグで次の一般的なバリエーションを検討します。

<p />

これを処理するには、一致に空白を追加します。

(?<!<p\s*)/(?!p>)

問題が発生する可能性があるのは、奇妙な空白 (まだ有効な HTML) です。次のスラッシュは、上記の正規表現と一致します。

< p/>
<p/ >

これは、正規表現に空白の繰り返しを追加することで対処できます。前述のように、これはテキスト内のスラッシュにも一致するため、次の入力は 1 つのスラッシュ (テキスト内のスラッシュ) のみに一致します。

<p>some text / other text</p>

最後に、もちろん CDATA グループがあります。次の入力は、スラッシュなしに一致します。

<![CDATA[This <p/> isn't actually a tag...it's just text.]]>
于 2013-10-08T14:09:33.967 に答える