2017-10-08 132 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

是,不要使用正則表達式,使用解析器。 – chris85

+0

「任何提示」都太寬泛。雖然較少貪婪和更具體的匹配('\ d +'或'\ w +')代替'。*'會避免大部分回溯。 – mario

回答

1

正如評論中所述,讓自己適應解析器和xpath查詢。
爲您具體的例子,這可能是:

<?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"; 


其中產量

Re: Zero Kara Hajimeru Isekai Seikatsu ep01, 60564, c0daea22d108b4d6888f6037623b61d505d5b345