[英]PHP regex to return <option> values
我只是想知道您是否可以通过一些我想在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,其他都没有,例如“ Option Value =“。
我在使用PHP时遇到麻烦。 到目前为止,我有这个:
preg_match("/OPTION VALUE=\"([0-9]*)/", $data, $matches);
print_r($matches);
用这个的返回值:
数组([0] => OPTION VALUE =“ 195 [1] => 195)数组([0] => OPTION VALUE =” 195 [1] => 195)
我该如何退回所有的#号?
我是模式匹配的新手,我读过的教程并没有太大帮助,所以非常感谢!
preg_match将返回仅包含第一个匹配项的数组。 数组的第一个索引将返回完整正则表达式的匹配项,第二个索引将匹配括号中的捕获组,请尝试以下操作以了解其工作原理:
preg_match("/(OPTION) VALUE=\"([0-9]*)/", $data, $matches);
print_r($matches);
您将看到它输出以下内容:
Array
(
[0] => OPTION VALUE="195
[1] => OPTION
[2] => 195
)
数组[0]包含完全匹配的数据,数组[1]包含来自第一个捕获组(OPTION)的数据,数组[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
)
)
我希望这可以使事情变得清楚!
我认为您做对了。 PHP会在[0]中返回完全匹配项,然后将捕获的组(括号)作为其他组。
检查一下: http : //xrg.es/#15m7krv
尝试这个:
preg_match_all('/OPTION VALUE=\\"([0-9])+\\"/', $data, $matches);
编辑
误解了你的问题。 更改为preg_match_all()
尝试使用preg_match_all()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.