【问题标题】:PHP - Regex in malformed HTMLPHP - 格式错误的 HTML 中的正则表达式
【发布时间】:2019-02-13 08:36:21
【问题描述】:

我在使用 Regex 时一直遇到问题,现在我需要扫描一段格式错误的代码以获取 option 标签 的内容,发生的情况是它们所在的网络获得的,有一个糟糕的编程并且结构在它的所有标签中都不匹配:

这是我一直用于其他不同部分的正则表达式,它对我来说效果很好,但在这方面它不能正常工作,我认为这是因为换行符或制表:

$pattern='/<td class="bgn"[ ]*colspan=1[ ]*>Padron[ ]:*<\/td>\r\n[\t]*[ ]+<td class="bg" colspan=[1|3]+>(.*)<\/td>/';
$output = preg_match_all($pattern, $Page, $matches, PREG_SET_ORDER);
if(isset($matches[0]))
{
    $rtn[Padron] = trim(utf8_encode( preg_replace( "[\s+]"," ", ($matches[0][1]) ) ) );
}

这是我要扫描的代码:

        <td class="bgn" colspan=1>Padrones :</td>
        <td class="bg" colspan=3>
          <select name="select"  >


                    <option value="00" >Incorporado al R&eacute;gimen de Buenos Contribuyentes (Resoluci&oacute;n N&deg; 0230050132461) a partir del 01/08/2015</option>                    





            <!-- JRR - 20/09/2010 - Se añade cambio de Igor -->




        </select>

我一直在使用PHP Live Regex 进行测试,但我无法捕获我需要的信息,这是选项标签内的信息。

PS:我知道使用 PHP Simple Html 会更简单,但该项目已经交给我并使用正则表达式。

【问题讨论】:

    标签: php html regex preg-match-all


    【解决方案1】:

    这个 RegEx 应该适用于 php:

    (?:Padron[\s\S]*?)(?:\<option[\s\S]*?>)([^<]+)
    

    在这里演示:phpLive

    您应该使用preg_match_all 并抓住Array(1)

    TheRegEx 以非捕获组'Padron' 开始,然后是&lt;option....&gt; 的非捕获组,最后在数组(1) 中捕获option 文本。

    我不认为,它非常有效,但确实有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多