Negative Number preg_match_all



Hi-All-im-One函数用于将ltr-css转换为rtl,但任何格式都无法正常工作我的函数是

public function rtlMargin($string)
{
    $string = trim($string);
    if (preg_match_all('~(-[0-9]+(px|%)?)~i', $string, $matches)) {
        $c = count($matches['1']);
        $p = $matches['1'];
        if ($c == 4)
            $order = implode(' ', array(
                $p['0'],
                $p['3'],
                $p['2'],
                $p['1']));
        else
            if ($c == 3)
                $order = implode(' ', array(
                    $p['0'],
                    0,
                    $p['2'],
                    $p['1']));
            else
            if ($c == 2)
                $order = implode(' ', array(
                    $p['0'],
                    0,
                    0,
                    $p['1']));
            else
            if ($c == 2)
                $order = implode(' ', array(
                    $p['0'],
                    0,
                    0,
                    $p['1']));
            else                
                $order = implode(' ', $p);
        if (preg_match('/auto/',$string)) {
            return 'margin: ' . $order . ' auto;' . '<br />';
        }
        else
        {
            return 'margin: ' . $order . ';' . '<br />';
        }            
    }
    return $string;
}

代码测试功能$res=$MyConverter->rtlMargin("margin:1px 2px 3px 4px");

输出为边距:1 x 4 x 3 x 2 x;

但是

$res .= $MyConverter->rtlMargin("margin:1-px 2px 3-px 4px");

的输出为空错误

if (preg_match_all('~(-[0-9]+(px|%)?)~i', $string, $matches))

在您的代码中,正则表达式只匹配带减号的大小,例如:-10px或-30%,您需要将"-"作为可选项,将"?"(问号)放在后面,就像"px"或"%"是可选项一样:(px|%)?:

Your regexp:    '~(-[0-9]+(px|%)?)~i'
Correct regexp: '~(-?[0-9]+(px|%)?)~i'

PS:请注意,3-px不是有效的负边距,正确的语法是-3px。无论如何,如果你仍然想匹配3-px,你可以使用这个正则表达式:'~(-?[0-9]+-?(px|%)?)~i'

参考:http://php.net/manual/en/regexp.reference.meta.php

相关内容

  • 没有找到相关文章

最新更新