如果标记为空,则regex声明'默认值'

时间:2013-11-16 08:15:46

标签: php regex string

我有一个正则表达式,它返回带有id="test"

的html标记内的任何内容

例如:

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

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

返回 Hello World

如果标签为空,它应该返回

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

如果标记为空,它应返回默认值。 我现在是regex的新手是否有任何正则表达式来驱逐这些空标签?

2 个答案:

答案 0 :(得分:0)

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

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

对我而言,它运作良好

答案 1 :(得分:0)

我假设你使用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];
}

此外,我建议不要使用此结构:.*?。如果我要写这个RegEx,我会这样做:

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

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