如果标签为空,正则表达式声明“默认值”


regex declare a 'default value' if a tag is empty

我有一个正则表达式,它是返回 html 标记内的任何内容,并带有id="test"

前任:

<span id="test">Hello World</span>
 <.*?id="pStyle".*?>(.*?)</.*?>

它返回你好世界

如果一个标签是空的,它应该返回太像

<span id="test"></span>

如果标记为空,它应返回默认值。我目前是正则表达式的新手,是否有任何正则表达式可以派生此空标签?

我假设你使用preg_match函数。当存在匹配项时,它将始终返回一个字符串。如果您想在标签为空时返回 null,我认为您应该添加一个if语句,例如

$string = '<span id="test">Hello World</span>';
$matches = array();
if (preg_match('%<.*?id="pStyle".*?>(.*?)</.*?>%', $string, $matches) {
    if (empty($matches[1])) {
        return null;
    }
    return $matches[1];
}

另外,我建议不要使用此结构:.*?。如果我写这个正则表达式,我会这样做:

<[^>]*id="pStyle"[^>]*>([^<]*)</[^>]*>

[^>]*表示:>以外的零个或多个字符。

也许在任何符号之后 <.*?id="pStyle".*?>(.*?)</.*?> 您应该添加多个符号

<(.*)id="pStyle"(.*)>(.*)<'/ (.*)>

对我来说,它工作得很好