2017-01-12 5 views
3

誰かが言う前に、私は適切なパーサーを使用すべきであることを知っていますが、私の使用例では正規表現を使用する方が良いです。htmlタグの外側に一致するテキスト

私はhtmlタグの外にテキストを試すと一致するには、次の正規表現を持っている:

(?<!<[^>]*)(?<Text>.+?) 

しかし、これはすなわち<、タグの開口部ブラケットに一致しているようです。これをどうすれば解決できますか?

例入力:期待

<span style="color:blue">some <strong>bold</strong> text</span> 

some bold text 

ガット:

<some <bold< text< 

Link to RegexStorm.

答えて

4

問題は、あなたがを使用していることです任意の文字に一致する。任意の文字に一致し[^<>]が、<>のように、否定文字クラスとそれを交換したり+(0回以上の繰り返しに一致するように)貪欲数量詞*を使用(1回以上の繰り返しに一致するように):

(?<!<[^>]*)(?<Text>[^<>]*) 

+?は、1以上の出現と一致する遅延量指定であるが、できるだけ少ない(1ためenougされているので、パターンの終わりに(?<Text>.+?)を使用するだけ正規表現エンジンのマッチ1文字になり、BTW regex demo

を見ますh、それは常にちょうど1つの文字に一致します)。通常、このような怠惰に定量化されたパターンの後に他のパターンが存在しなければなりません。そうでなければ、通常、正しいテキストを取得しません。

関連する問題