0

私のテキストは以下の通りです:

<font size=+2 color=#F07500><b> [ba]</font></b>
<ul><li><font color =#0B610B> Word word wordWord word.<br></font></li></ul>
<ul><li><font color =#F07500> Word word word.<br></font></li></ul>
<ul><li><font color =#0B610B> Word word word wordWord.<br></font></li></ul>
<ul><li><font color =#0B610B> WordWord.<br></font></li></ul>
<br><font color =#E41B17><b>UPPERCASE LETTERS</b></font> 
<ul><li><font color =#0B610B> Word word wordWord word.<br></font><br><font color =#E41B17><b>PhD and dataBase</b></font> </li></ul>
<font color =#0B610B> Word word word.<br></font></li></ul><dd><font color =#F07500>     »» Word wordWord word.<br></font>

各 . には、小文字の直後に大文字が続きます<font color =#0B610B>...</font>。例えば:

<font color =#0B610B> Word word wordWord word.<br></font>

次のように分割して、このエラーを修正します (つまり、コロンとスペースを追加します)。

<font color =#0B610B> Word word word: Word word.<br></font>

これまでのところ、私は使用しています:

(<font color =#0B610B\b[^>]*>)(.*?</font>)

の各インスタンスを選択すると、 の 1 つのインスタンスごとに<font color =#0B610B>...</font>1 つのインスタンスを見つけるのにうまく機能します<font color =#0B610B>...</font>

しかし、私が使用するとき:

(<font color =#0B610B\b[^>]*>)(.*?[a-z])([A-Z].*?</font>)

他のfont-colorタグに関係なく、1行ですべてを見つけて選択し<font color =#0B610B>...</font>、他の不要なインスタンスを置き換えます。

この特定のタグのペアのそれぞれでエラーを見つけて置き換えたい:で始まり、で終わる<font color =#0B610B>...</font>すべてを取得しない<font color =#0B610B></font>

この問題を解決する正規表現はありますか? よろしくお願いします。

4

1 に答える 1

1

一般に、正規表現は HTML の解析には適していません (1 回限りの場合は問題ない可能性があります)。

これが、正規表現が機能しない理由である可能性があると思います。正規表現が失敗する例を挙げていただけますか?

考えられる 1 つのケースは、一致するペア[a-z][A-Z]内に一致 ( )なく、隣接する. 例えば:<font color=#0B610B></font><font></font>

<font color=#0B610B>word word</font><font color=#000000>word wordWord</font>

この場合、唯一の有効な一致は<font color=#0B610B>word word</font><font color=#000000>word word文字列の残りの部分であり、Word</font>これが正規表現の一致です (一致できる場合はそうなるからです!)

大雑把な回避策を考えることはできますが、HTML に正規表現を使用すると常にこのようなエラーが発生しやすいため、このタスクが 1 回限りである場合を除き、お勧めしません。この正規表現もかなり非効率的です。試してください(未テスト):

(<font color =#0B610B\b[^>]*>)(([^<]|<(?!/font))*?[a-z])([A-Z].*?</font>)

それは、「タグを探し、その後に が続かない<font colour=xxxx>山括弧、またはその他のものが続き、再び" が続くタグを探します。そのため、一致が境界を超えないようにします。< /font[a-z][A-Z]</font>

于 2012-01-08T07:24:06.147 に答える