我想捕获以下html字符串中方括号内的文本。
但是我下面的正则表达式不会分别获得'image'和imagealt',而是返回'image]“alt =” [imagealt“。如果我从字符串中取出alt =“[imagealt]”,则它会按我期望/想要的那样返回。

$html = '<h2>[title]</h2>
<div class="content"><img src="[image]" alt="[imagealt]" /></div>
<div class="content">[text]</div>';

preg_match_all("^\[(.*)\]^",$html,$fields, PREG_PATTERN_ORDER);

echo "<pre>";
print_r($fields);
echo "</pre>";


Array
(
    [0] => Array
        (
            [0] => [title]
            [1] => [image]" alt="[imagealt]
            [2] => [text]
        )

    [1] => Array
        (
            [0] => title
            [1] => image]" alt="[imagealt
            [2] => text
        )

)

最佳答案

您的正则表达式很贪婪。您需要停止贪婪地做自己想做的事。进一步了解贪婪here

如果匹配是贪婪的,它将忽略满足正则表达式的第一种情况,并会继续尝试匹配,直到它消耗尽可能多的输入为止。

通常,这涉及添加?,但我不确定php,但是您可以尝试:

preg_match_all("^\[(.*?)\]^",$html,$fields, PREG_PATTERN_ORDER);

关于php - 正则表达式在方括号[]中查找字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9665101/

10-14 13:31
查看更多