2017-07-08 14 views
-1

私は正規表現を理解しようとしています:正規表現全試合

私だけtext_01text_02に一致するとタグをフィルタリングする必要があります。

(?<=<span>)(([^>]+)<b>)(.+?)(?=</b>) 

をしかし、それは3つのグループをキャプチャし、そして完全一致はタグが含まれています

<span>text_01<b>text_02</b> 

私はそれが好きでやってみました。

text_01<b>text_02 

フルマッチにはテキストとタグが含まれていない正規表現をどのように構築する必要があるのか​​アドバイスできますか?

答えて

0

解析HTMLの正規表現と非常に複雑に得ることができます。一般的にはnot advised practiceであり、これにパーサーを使用する方が良いです(あなたが使用している言語のライブラリもあります)。

しかし、あなたはテキストコンテンツが<>、およびこれら<を持っていないと>がネストされていない、あなたはこの1つを使用することができます確信している例について:

[^<>]*(?=<[^<>]*>)

これだけ一致テキスト続いて<>のペアが続きます。

それはそのテキストが<が続いてテストするのに十分であるならば、それは単にすることができます:

[^<>]*(?=<)

+0

ありがとうございました。これは私が必要とするものです。あなたは素晴らしいです。 – recont

0

非キャプチャグループを使用すると、<b>タグをキャプチャグループとして除外できますが、タグが含まれていなければ完全一致を得ることはできません。不可能ですが、正規表現ではキャプチャ中に一部をスキップすることはできません。マッチは連続していなければなりません。

(?<=<span>)(.+?)(?:<b>)(.+?)(?=<\/b>) 
  • 全試合text_01<b>text_02
  • グループ1 text_01
  • グループ2 text_02