我有以下模式:
[\{\}].*[\{\}]
使用以下测试字符串(如果需要可以提供更多):
}.prop{hello:ars;} //shouldn't match
}#prop{} //should match
}.prop #prop {} //should match
模式的目的是找到空的css规则集。有人可以建议我如何排除第二组括号中的字符匹配?随着我越来越接近解决方案,我将更新模式。
编辑:
在http://gskinner.com/RegExr/
这种模式:[\}].*[\{]{1}[/}]{1}
虽然因为我不理解的原因转移到php时它似乎已经破解了。
编辑: 首先道歉,如果这应该是一个单独的问题。 使用php中第一次编辑中的模式:
$pattern = "/[\}].*[\{]{1}[/}]{1}/";
preg_match_all ($pattern, $new_css, $p);
print_r($p);
当$ new_css是包含空规则集的上载css文件的内容字符串时,永远不会填充$ p。但我知道这种模式还可以。谁能看出问题是什么?
编辑:最终解决方案
//take out other unwanted characters
$pattern = "/\}([\.#\w]\w+\s*)+{}/";
//do it twice to beat any deformation
$new_css = preg_replace ($pattern, '}', $new_css);
$new_css = preg_replace ($pattern, '}', $new_css);
答案 0 :(得分:1)
尝试在正则表达式周围使用单引号,或将\
字符加倍。 PHP在双引号字符串中处理\
的方式是\{
变为{
,打破了正则表达式。
答案 1 :(得分:0)
尝试模式:'/}([\.#]\w+\s*)+{}/'
$new_css = "{}.prop{hello:ars;}
{}#prop{} //should match
}.prop #prop {} //should match
}.prop { aslkdfj}
}.prop { }
";
$pattern = '/}([\.#]\w+\s*)+{}/';
preg_match_all ($pattern, $new_css, $p);
print_r($p);
输出:
Array
(
[0] => Array
(
[0] => }#prop{}
[1] => }.prop #prop {}
)
[1] => Array
(
[0] => #prop
[1] => #prop
)
)