2017-10-06 7 views
-1

私はHTMLからメタタグを解析していました。すべて正常に動作しますが、場合によってはメタタグを解析できません。 string regexImgSrc = @"<meta property.*?>";これに応じてHTMLからメタタグを解析できません

しかし、時には、私はこのようなHTMLから別のフォーマットでmetaタグを取得:正規表現<meta property="fb:pages" content="6456456"/>

:ここ

は、タグ形式ある

<meta data-react-helmet="true" property="article:publisher" content=""/> 

だから、正規表現ではありません期待される出力を得る。 メタタグのプロパティ名とコンテンツだけが必要です。ここ は私のコードは、限り、あなたのHTMLSは非常に限られているとして働いて正規表現でHTMLを解析事前

+0

HTMLを解析するための正規表現を使用することは推奨されません。 htmlは正規表現ではなく、正規表現は正規表現です。 – jdweng

+1

なぜhtml解析ライブラリ(Html Agility Pack)を使用していないのですか?その単なる提案 –

+0

いいえ、ライブラリやサードパーティのツールを使いたくない@Usman – sachin

答えて

0

感謝を助けてください

 string regexImgSrc = @"<meta property.*?>";  
     MatchCollection matches = Regex.Matches(htmldata, regexImgSrc, RegexOptions.IgnoreCase | RegexOptions.Singleline); 

です。例えば。あなたはそれらの束を解析します。バックオフィスプロセスとして。この場合でも、必要に応じて正規表現を変更する必要があります。

ここでは少し拡張された正規表現を示します。まだ一致しないことに注意してください:

<meta[^>]*?property=("[^"]*"|'[^']*')[^>/]*\/> 

デモhere 説明:

  • <meta[^>]
  • [^>]*?試合はそれが終了タグはありません詰め込むタグの開始と一致します。 *?は試合が最後まで詰め込む再びアポストロフィまたは引用符
  • のいずれかのプロパティ値が囲まれることを可能にする試合はわずかに速く起こるよう
  • property=はproperty属性
  • ("[^"]*"|'[^']*')に一致する[^>/]*怠惰な数量詞です
  • が、これはタグ\/>

の終わりだからHTMLを解析するための真の解決策何ですか?さて、HTML agility packのようなhtmlパーサーを使用してください。あなたは(簡単な)正規表現を続行したい場合は

+0

誰でも落札してください、間違っていると説明してください。私。それは動作しませんか?私はこの正規表現の限界についてOPに警告していませんでしたか?パーサーベースのソリューションも提案していませんか? –

0

、あなたはこれを使用することができます。

<meta (?:.*?)*?property.*?> 

(?:[^<>]*?)*?の意味:

  • ?:は、キャプチャグループ
  • .*?に任意の文字を作成しないでください0回以上、できるだけ少ない回数
  • スペース
  • (...)*?全部0回以上

は実際には、この正規表現は、単語「プロパティ」を含むすべてのメタタグを、一致します。たとえば<meta some-attr="some property" />も一致します。

これはすばやく汚い方法ですが、正規表現を使用することもおすすめしません。


PS:私はあなたが正規表現を少し改善するために、「プロパティ」の後に=を追加することに留意:<meta (?:.*?)*?property=.*?>

関連する問題