有关改进多行正则表达式的任何提示?

时间:2017-10-08 16:42:03

标签: php regex

This regex的工作方式应该如此,但也许可以让它变得更好一点?

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

正则表达式有效,但正如您所看到的那样,它有相当多的步骤。 (在这种情况下为21837。)

1 个答案:

答案 0 :(得分: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