Php 正则表达式匹配HTML选项的内容

Php 正则表达式匹配HTML选项的内容,php,regex,Php,Regex,NB:如果您能够在项目中使用DOM解析器,请使用它们,仅在边缘情况下使用正则表达式。 我需要得到一个包含每个选项内容的数组,这是我的HTML: <option value="2" selected>none</option> <option value="1">fronttext</option> <option value="15">fronttext,frontpicture</option> 我正在使用这个正则表达式

NB:如果您能够在项目中使用DOM解析器,请使用它们,仅在边缘情况下使用正则表达式。

我需要得到一个包含每个选项内容的数组,这是我的HTML:

<option value="2" selected>none</option>
<option value="1">fronttext</option>
<option value="15">fronttext,frontpicture</option>
我正在使用这个正则表达式:

<option.*>(.*)<\/option> 
preg_match_all('~<option[^>]*>([^<]*)</option>~', $string, $matches);
(*)
但当我在PHP中使用它时:

preg_match_all('/<option.*>(.*)<\/option>/', $string, $matches);
preg_match_all(“/(.*)/”,$string,$matches);
它只匹配最后一个结果(
“fronttext,frontpicture”


我做错了什么?

这是因为你在你的正则表达式中使用了
*
,这本质上是贪婪的

试试这个正则表达式:

<option.*>(.*)<\/option> 
preg_match_all('~<option[^>]*>([^<]*)</option>~', $string, $matches);

preg\u match\u all('~]*>([^这是因为你在你的正则表达式中使用了
*
,这本质上是贪婪的

试试这个正则表达式:

<option.*>(.*)<\/option> 
preg_match_all('~<option[^>]*>([^<]*)</option>~', $string, $matches);

preg\u match\u all('~]*>([^这是因为你在你的正则表达式中使用了
*
,这本质上是贪婪的

试试这个正则表达式:

<option.*>(.*)<\/option> 
preg_match_all('~<option[^>]*>([^<]*)</option>~', $string, $matches);

preg\u match\u all('~]*>([^这是因为你在你的正则表达式中使用了
*
,这本质上是贪婪的

试试这个正则表达式:

<option.*>(.*)<\/option> 
preg_match_all('~<option[^>]*>([^<]*)</option>~', $string, $matches);

preg\u match\u all('~]*>([^您可以使用下面的正则表达式

<option.*?>\K.*?(?=<\/option>)

您可以使用下面的正则表达式

<option.*?>\K.*?(?=<\/option>)

您可以使用下面的正则表达式

<option.*?>\K.*?(?=<\/option>)

您可以使用下面的正则表达式

<option.*?>\K.*?(?=<\/option>)


Regex并不是解析HTML的最佳方法(尽管您在XHTML中使用它会更幸运)。我建议您改用DOM解析器。我不能,我正在破解一个旧代码,没有其他解决方案。这里的Regex很好。怎么了?您的Regex在
$matches[1]上生成了所需的结果
.Regex并不是解析HTML的最佳方法(尽管您在XHTML中使用它会更幸运)。我建议您改用DOM解析器。我不能,我正在破解一个旧代码,没有其他解决方案。这里的Regex很好。怎么了?您的Regex在
$matches[1]上生成了所需的结果
.Regex并不是解析HTML的最佳方法(尽管您在XHTML中使用它会更幸运)。我建议您改用DOM解析器。我不能,我正在破解一个旧代码,没有其他解决方案。这里的Regex很好。怎么了?您的Regex在
$matches[1]上生成了所需的结果
.Regex并不是解析HTML的最佳方法(尽管您在XHTML中使用它会更幸运)。我建议您改用DOM解析器。我不能,我正在破解一个旧代码,没有其他解决方案。这里的Regex很好。怎么了?您的Regex在
$matches[1]上生成了所需的结果
。但是他的
正则表达式
$matches[1]
上产生了期望的结果,而你的正则表达式也给出了相同的结果。那么有什么区别呢?区别在于OP的正则表达式中使用了
*
,这在本质上是贪婪的。但是他的
正则表达式
$matches[1]上产生了期望的结果
和你的正则表达式也给出了相同的结果。那么有什么区别呢?区别在于OP的正则表达式中使用了贪婪的
*
。但是他的
正则表达式在
$matches[1]上产生了期望的结果
和你的正则表达式也给出了相同的结果。那么有什么区别呢?区别在于OP的正则表达式中使用了贪婪的
*
。但是他的
正则表达式在
$matches[1]上产生了期望的结果
和你的正则表达式也给出了相同的结果。那么有什么区别呢?区别在于OP的正则表达式中使用了本质上贪婪的
*
。你不需要一个捕获组。
\K
会弄脏之前的所有匹配,并且lookahead断言以下字符串必须是
。因此标记中的文本是匹配的。
pri新界南($matches)
将匹配的字符串存储在一个数组中。它首先优先选择组,然后是匹配的字符串。在我的数组中,没有组,所以匹配的字符串存储在一个数组中。你不需要捕获组。
\K
会弄脏所有以前的匹配,并且“向前看”断言以下字符串必须是
标记中的t匹配。
print\r($matches)
将匹配的字符串存储在一个数组中。它首先优先选择组,然后是匹配的字符串。在我的数组中,没有组,所以匹配的字符串存储在一个数组中。你不需要捕获组。
\K
会弄脏所有以前的匹配,并且“向前看”断言以下字符串必须是
标记中的t匹配。
print\r($matches)
将匹配的字符串存储在一个数组中。它首先优先选择组,然后是匹配的字符串。在我的数组中,没有组,所以匹配的字符串存储在一个数组中。你不需要捕获组。
\K
会弄脏所有以前的匹配,并且“向前看”断言以下字符串必须是
标记中的t是匹配的。
print\r($matches)
将匹配的字符串存储在一个数组中。它首先优先选择组,然后是匹配的字符串。在我的示例中,没有组,因此匹配的字符串存储在一个数组中。