【问题标题】:Regular expression return one result on two [duplicate]正则表达式在两个上返回一个结果[重复]
【发布时间】:2015-04-27 16:19:47
【问题描述】:

我尝试从网站检索结果,但我编写的正则表达式不想返回所有结果我有结果 1,3,5... 但从不返回 2,4,6...

这是一个文本示例:

<tr>
<td style="background-color:white">Inter en attente de cloture : </td>
<td style="background-color:red">depuis +2H</td>
<td style="background-color:#FF7F00">depuis -2H</td>
</tr>
</table>
<table class="tab_script">
<tr>
<td>N° commande</td>
<td>Nom</td>
<td>Prenom</td>
<td>N° Mobile</td>
<td>N° Fixe</td>
<td>Ville</td>
<td>Code Postal</td>
<td>Num. Intervention</td>
<td>date rdv</td>
</tr>

<tr bgcolor="#E5E5E5">
<form method="POST">
<td></td>
<td>NOM 1</td>
<td></td>
<td>0600000000</td>
<td>0400000000</td>
<td>VILLE</td>
<td>12345</td>
<td><a  href="index.php?id=13&statut=2&id_inter=123271915">123271915</a></td>
<td style="background-color:red">23/11/2012 08:30</td>
</tr>
</form>

<tr bgcolor="#FFFFFF">
<form method="POST">
<td></td>
<td>NOM 2</td>
<td></td>
<td>0600000000</td>
<td>0400000000</td>
<td>VILLE</td>
<td>54321</td>
<td><a  href="index.php?id=13&statut=2&id_inter=130680172">130680172</a></td>
<td style="background-color:red">09/03/2013 18:30</td>
</tr>
</form>

<tr bgcolor="#E5E5E5">
<form method="POST">
<td></td>
<td>NOM 3</td>
<td></td>
<td>0600000000</td>
<td>0400000000</td>
<td>VILLE</td>
<td>12345</td>
<td><a  href="index.php?id=13&statut=2&id_inter=123271915">123271915</a></td>
<td style="background-color:red">23/11/2012 08:30</td>
</tr>
</form>

<tr bgcolor="#FFFFFF">
<form method="POST">
<td></td>
<td>NOM 4</td>
<td></td>
<td>0600000000</td>
<td>0400000000</td>
<td>VILLE</td>
<td>54321</td>
<td><a  href="index.php?id=13&statut=2&id_inter=130680172">130680172</a></td>
<td style="background-color:red">09/03/2013 18:30</td>
</tr>
</form>

还有我的正则表达式:

$preg='#<tr.*?>.*?';
$preg.='<form.*?>.*?';
$preg.='<td>(.*?)</td>.*?';
$preg.='<td>(.*?)</td>.*?';
$preg.='<td>(.*?)</td>.*?';
$preg.='<td>(.*?)</td>.*?';
$preg.='<td>(.*?)</td>.*?';
$preg.='<td>(.*?)</td>.*?';
$preg.='<td>(.*?)</td>.*?';
$preg.='<td>(.*?)</td>.*?';
$preg.='<td>(.*?)</td>.*?';
$preg.='#ism';
preg_match_all($preg,$response,$match);

结果:

【问题讨论】:

  • 我刚刚看到,如果我复制粘贴第一部分,我想找到几次它会被 preg 找到,而且问题不是我的正则表达式,而是文本本身但是我没有看到有什么不同...
  • lolwut... 已经使用 html 解析器...
  • 查看 PHP 类 DomDocument。用正则表达式解析 HTML 有太多问题,关于它的很多帖子,这里有一个详尽的例子:stackoverflow.com/questions/3577641/…
  • 我想要它,但我需要快速的代码,我不知道它是如何工作的,请问您如何获取我示例中的数据?
  • 他所说的可以用正则表达式来完成。我只是相信这不是最快也不是最简单的解决方案

标签: php regex html-parsing preg-match-all


【解决方案1】:

您似乎知道所有文件的格式都是一致的。

我建议你逐行搜索并存储你需要的数据。

一个更好的解决方案是使用PHP SAX,它完全可以做到这一点,但对于 XML:

链接的代码在每次找到开始标签时调用startElement,在每个结束标签时调用endElement。因为你知道你的结构,所以很容易找到你需要的数据

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2015-08-15
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多