2012-01-08 8 views
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>...</font>のインスタンスのそれぞれを選択する
(<font color =#0B610B\b[^>]*>)(.*?</font>) 

、それは<font color =#0B610B>...</font>の1つのインスタンスであるインスタンスを見つけることで正常に動作します。

しかし、私は使用している場合:

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

それが見つける関係なく、他のフォントカラータグの1行で<font color =#0B610B>...</font>間のすべてのものを選択し、他の不要なインスタンスを置き換えません。

私はそれがタグのこの特定の組のそれぞれに誤りを見つけ、交換したい:</font>

ですべて<font color =#0B610B>で開始と終了をつかんではない、<font color =#0B610B>...</font>は、この問題を解決するための任意の正規表現はありますか?事前に多くの感謝。

答えて

1

一般に、正規表現はHTMLを解析するのには良いアイデアではありません(一度オフにすればOKです)。

これはあなたの正規表現が機能していない理由かもしれないと思います。 正規表現が失敗した場合の例を挙げることができますか?存在する場合、私が考えることができる

一つ場合は、一致<font color=#0B610B></font>ペア内一致([a-z][A-Z])はありませんが、隣接<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用のregexを使用すると常にこのようなエラーが発生しやすいため、このタスクが一度限りでない限りは推奨しません。この正規表現もかなり非効率的です。 (未テスト)してみてください。

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

それは言う、「<font colour=xxxx>タグを探し、角度/font続いブラケット<ない、または何か他のいずれかに続いて、再び[a-z][A-Z]が続きます」。 それで、一致が</font>境界を超えていないことを確認しようとします。

+0

ありがとう、数学。コーヒー。私はこれが私の望むものを見つけるようだが、\\ \ 2:\ 3 \ 4で置き換えられたときに役立つと思うので、マッチは '単語:xWord'に変わる。私はなぜ文字** x **がここに追加されているのかわかりません(** x **は任意の文字です)。 –

+0

これは、余分な内部キャプチャ括弧があるためです。 '\ 3'には1つの文字が含まれています。 '\ 2'は' \ 3'を取り囲むので、 '\ 1 \ 2:\ 4'と置き換えてください。 –

+0

素晴らしい!あなたは私の日、数学を保存しました。コーヒー。今は魅力のように機能します。どうもありがとうございます。 –

関連する問題