简体   繁体   中英

Pattern matching css rules

I have the following pattern:

[\{\}].*[\{\}]

With the following test strings (can provide more if needed):

}.prop{hello:ars;} //shouldn't match
}#prop{} //should match
}.prop #prop {} //should match

The purpose of the pattern is to find empty css rulesets. Can someone suggest how I go about excluding matches with characters between the second set of brackets? I will be updating the pattern as I get closer to a solution.

edit: on http://gskinner.com/RegExr/ this pattern: [\\}].*[\\{]{1}[/}]{1} seems to have the desired result although it is breaking when transfered to php for reasons I don't understand.

edit: first apologies if this should be a separate question. Using the pattern in the first edit in php:

    $pattern = "/[\}].*[\{]{1}[/}]{1}/";
    preg_match_all ($pattern, $new_css, $p);
    print_r($p);

When $new_css is a string of the content of an uploaded css file containing empty rulesets, $p is never populated. Yet I know this pattern is ok. Can anyone see what the issue is?

edit: final solution

//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);

Try using single quotes around the regex, or doubling the \\ characters. The way PHP handles \\ in double-quoted strings is that \\{ becomes { , breaking the regex.

Try the pattern: '/}([\\.#]\\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);

This outputs:

Array
  (
    [0] => Array
    (
      [0] => }#prop{}
      [1] => }.prop #prop {}
    )

    [1] => Array
    (
      [0] => #prop
      [1] => #prop
    )
  )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM