2017-10-08 6 views
-1

This regexこれは想定されているように機能しますが、多少改善することは可能でしょうか?複数行の正規表現を改善するためのヒント?

<tr class="KNap"><td align="left">(.*)<\/td><td><a.*\n.*\n.*\n.*id" value="(.*)"><input type="hidden" name="sh" value="(.*)" 

正規表現は機能しますが、わかるように、かなり大きなステップがあります。 (この場合は21837です。)

+2

を生成する

<?php $dom = new DOMDocument; libxml_use_internal_errors(true); $dom->loadHTML($your_html_here, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); libxml_use_internal_errors(false); $xpath = new DomXPath($dom); # KKom $text = $xpath->query("//tr[@class='KNap']/td/text()")->item(0)->textContent; $form = $xpath->query("//tr[@class='KKom']//form")->item(0); $id = $xpath->query("input[@name='id']", $form)->item(0)->getAttribute("value"); $sh = $xpath->query("input[@name='sh']", $form)->item(0)->getAttribute("value"); echo "$text, $id, $sh"; 


はい、パーサを使用し、正規表現を使用してはいけません。 – chris85

+0

「任意のヒント」が広すぎます。 '。* 'の代わりにあまり欲張りではなく、より具体的なマッチ(' \ d + 'や' \ w + ')はほとんどのバックトラッキングを避けます。 – mario

答えて

1

コメントに記載されているように、パーサーとxpathクエリに慣れてください。あなたの具体的な例
が、これは次のようになります。

Re: Zero Kara Hajimeru Isekai Seikatsu ep01, 60564, c0daea22d108b4d6888f6037623b61d505d5b345 
関連する問題