【问题标题】:Need help with regular expressions in PHP在 PHP 中需要正则表达式方面的帮助
【发布时间】:2010-11-10 19:10:31
【问题描述】:

我正在尝试从一系列共享相同格式的 .html 中索引一些内容。

所以我得到了很多这样的行:<a href="meh">[18] blah blah blah < a...

这个想法是提取数字(18)和它旁边的文本(等等......)。此外,我知道每条符合条件的行都以"> 开头,以<a</p 结尾。问题源于需要将所有其他 htmHTML 标记保留为文本的一部分(<i><u> 等)。

那么我有这样的事情:

$docString = file_get_contents("http://whatever.com/some.htm");
$regex="/\">\ [(.*?)\ ] (<\/a>)(.) *?(<)/";
preg_match_all($regex,$docString,$match);

让我们看一下$regex。忽略它的空格,我只是把它们放在这里,否则一些字符会消失。我指定它将以"&gt; 开头。然后我在[] 里面做数字。然后我挑出&lt;/a&gt;。到目前为止一切顺利。

最后,我做了一个(.)*?(&lt;)。这是转折点。通过留下最后一位,(&lt;) 这样,当找到下划线或斜体标签时,文本将被中断。但是,如果我输入(&lt;a|&lt;/p),则结果数组最终为空。我尝试将其更改为仅 (&lt;a),但似乎 2 个字符搞砸了整个 ting。

我能做什么?我整天都在为此苦苦挣扎。

【问题讨论】:

    标签: php html regex html-parsing


    【解决方案1】:

    PHP Tidy 是你的朋友。 Don't use regexes

    【讨论】:

      【解决方案2】:

      考虑到您的示例和描述,/"&gt;\[(.*)\](.*)(?:&lt;(?:a|\/p))/ 之类的东西似乎可以正常工作。也许添加非捕获子模式可以吗?请提供一个反例,其中这对您不起作用。

      虽然我同意 RegEx 不是解析器,但听起来您正在寻找的是一个有规律的字符串的一部分 - 这正是 RegEx 的强项。

      【讨论】:

        【解决方案3】:

        如您所见,使用正则表达式解析 HTML 并不容易。这是因为 HTML 不是特别规则。

        我建议使用 XML 解析器,例如 PHP 的 DomDocument

        创建一个对象,然后使用loadHTMLFile 方法打开文件。使用getElementsByTagName 提取您的a 标记,然后将内容提取为NodeValue 属性。

        它可能看起来像

        // Create a DomDocument object 
        $html = new DOMDocument(); 
        
        // Load the url's contents into the DOM 
        $html->loadHTMLFile("http://whatever.com/some.htm"); 
        
        // make an array to hold the text 
        $anchors = array(); 
        
        //Loop through the a tags and store them in an array 
        foreach($html->getElementsByTagName('a') as $link) { 
            $anchors[] = $link->nodeValue;
            } 
        

        这种 XML/HTML 解析器的替代方案是phpquery。他们页面上的文档应该很好地解释了如何提取标签。如果你了解 jQuery,界面可能看起来更自然。

        【讨论】:

          猜你喜欢
          • 2011-05-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-19
          • 1970-01-01
          • 1970-01-01
          • 2012-11-30
          • 2023-03-19
          相关资源
          最近更新 更多