【问题标题】:How to get an html content when there are linebreaks using a preg_match?使用 preg_match 存在换行符时如何获取 html 内容?
【发布时间】:2013-07-02 14:45:44
【问题描述】:

在执行preg_match html 源代码时如何在我的正则表达式中包含换行符?

php

preg_match('/Корица:<\/b><\/td><td>(.*)<\/td>/im', $table[0], $korica);

html(这也是$table[0]中的内容):

<tr>

            <td><b>Година на издаване:</b></td>

            <td itemprop="datePublished">2009</td>

          </tr>

          <tr>

            <td><b>Корица:</b></td>

            <td>Мека</td>

          </tr>

          <tr>

            <td><b>Език:</b></td>

            <td itemprop="inLanguage">Български</td>

          </tr>





                      <tr>

            <td><b>Средна оценка:</b></td>

            <td>                  Продуктът няма оценка                  </td>

          </tr>

如果我使用preg_match_all,我将获得Корица之后的所有html。但我想要的是从 html 中只得到这个 Meka

【问题讨论】:

    标签: php html-parsing preg-replace


    【解决方案1】:

    将正则表达式中的 (.*) 部分更改为非贪婪的 (.*?),甚至更好 - ([^&lt;]*),它匹配所有不是 &lt; 的内容。

    【讨论】:

    • 谢谢,这让神奇的宽度有点变通了。我用过:preg_match('/&lt;td&gt;&lt;b&gt;Корица:&lt;\/b&gt;&lt;\/td&gt;(.*?)&lt;td&gt;(.*?)&lt;\/td&gt;/is', $table[0], $korica); 我得到了我需要的东西。
    【解决方案2】:

    如果“Meka”总是字母数字,那么这样的事情可能会起作用:

        preg_match('/Корица:<\/b><\/td><td>([a-zA-Z0-9]*)<\/td>/im', $table[0], $korica);
    

    [a-zA-Z0-9]* 应该只匹配字母数字字符。您可能还需要考虑一个空格,在这种情况下,您应该使用 [a-zA-Z0-9 ]* (注意结束前的空格 ])

    【讨论】:

    • 问题是Meka 是西里尔字母,无法匹配这个正则表达式,我尝试使用[a-zA-Z\p{Cyrillic}],我认为它应该是正确的,但又失败了。
    • 也许你可以单独尝试[\p{IsCyrillic}]*
    • 嗯,我收到了这个警告:Warning: preg_match(): Compilation failed: unknown property name after \P or \p at offset 56。也试过了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多