【问题标题】:PHP regex to return <option> valuesPHP 正则表达式返回 <option> 值
【发布时间】:2012-03-07 01:38:01
【问题描述】:

只是想知道您是否可以帮助我完成我正在尝试在 php 中执行的一项小任务。

我在一个文件中有类似这样的文本:

    (random html)
    ...
    <OPTION VALUE="195" SELECTED>Physical Chem  
    <OPTION VALUE="239">Physical Chem Lab II  
    <OPTION VALUE="555">Physical Chem for Engineers            
    ...
    (random html)

我想返回选项值的 # 值,忽略其他所有内容。 例如,在上述情况下,我希望返回 195、239 和 555,而不是像“选项值 =”这样的其他值。

我在 PHP 中遇到了麻烦。到目前为止,我有这个:

preg_match("/OPTION VALUE=\"([0-9]*)/", $data, $matches);
        print_r($matches);  

用this的返回值:

数组([0] => OPTION VALUE="195[1] => 195) 数组([0] => OPTION VALUE="195[1] => 195)

我怎样才能返回所有的#?

我是模式匹配的新手,我读过的教程没有多大帮助,非常感谢!

【问题讨论】:

    标签: php regex pattern-matching web-scraping


    【解决方案1】:

    preg_match 将返回一个仅包含第一个匹配项的数组。数组的第一个索引将返回完整正则表达式的匹配,第二个匹配括号中的捕获组,尝试以下操作以了解其工作原理:

    preg_match("/(OPTION) VALUE=\"([0-9]*)/", $data, $matches);
        print_r($matches);
    

    您将看到它输出以下内容:

    Array
    (
        [0] => OPTION VALUE="195
        [1] => OPTION
        [2] => 195
    )
    

    Array[0] 包含完全匹配的数据,array [1] 包含来自第一个捕获组 (OPTION) 的数据,array[2] 包含来自第二个捕获组 ([0-9]*) 的数据。

    为了匹配多个匹配项,您需要使用 preg_match_all 函数。如果我们将其应用于您的原始代码,如下所示:

    preg_match_all("/OPTION VALUE=\"([0-9]*)/", $data, $matches);
        print_r($matches);
    

    我们得到:

    Array
    (
        [0] => Array
            (
                [0] => OPTION VALUE="195
                [1] => OPTION VALUE="239
                [2] => OPTION VALUE="555
            )
    
        [1] => Array
            (
                [0] => 195
                [1] => 239
                [2] => 555
            )
    
    )
    

    我希望这能让事情变得清晰!

    【讨论】:

      【解决方案2】:

      我认为你做得对。 PHP 返回 [0] 中的完整匹配,然后将捕获的组(括号)作为其他组。

      看看这个: http://xrg.es/#15m7krv

      【讨论】:

        【解决方案3】:

        试试这个:

        preg_match_all('/OPTION VALUE=\"([0-9])+\"/', $data, $matches);

        编辑

        误解了你的问题。改为preg_match_all()

        【讨论】:

          【解决方案4】:

          【讨论】:

            猜你喜欢
            • 2017-05-05
            • 2016-02-06
            • 1970-01-01
            • 1970-01-01
            • 2023-02-16
            • 1970-01-01
            • 2018-03-29
            • 2018-03-28
            • 1970-01-01
            相关资源
            最近更新 更多