代码之家  ›  专栏  ›  技术社区  ›  dclowd9901

用于标识CSS文件中没有内容的类/id的正则表达式

  •  0
  • dclowd9901  · 技术社区  · 14 年前

    问题

    也就是说,我正在寻找一个表达式,该表达式将标识后跟“{”(有些在括号之间有空格,有些没有)的文本,如果在该括号和“}”(空格不计算)之间没有字母或数字,它将被标识为匹配的字符串。

    我想我可以在运行正则表达式之前删去文档中的空白,但是我不想改变文本的基本结构。我希望把它换成一个大箱子 <textarea> .

    解释字符和它们的意义的加分,以及一个表达识别没有任何文字或数字的副本中的行,以及。我可能会使用PHP脚本中的最终表达式。

    热释光;博士:

    要匹配的正则表达式:

    .a_class_or #an_id {
        /* if there aren't any alphanumerics in here, 
           this should be a matching line of text */
    }
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Greg W    14 年前

    这是一个好的开始。用PHP测试。

    /[#\w\s\.\-\[\]\=\^\~\:]+\{[\s\n\r\t]*\}/
    

    这部分与选择器匹配表示ID,\w匹配字母数字和下划线,句点表示类。然后我加入了[]=^和~作为一些高级css选择器,但是如果它们经常被使用,我会感到惊讶。

    [#\w\s\.\-\[\]\=\^\~\:]+
    

    第二部分在花括号内寻找一个空白。我们这里有空格、换行符、返回符和制表符的特殊字符。如果还有什么不匹配的话。

    \{[\s\n\r\t]*\}
    

    如果您感兴趣的话,下面是我用来在PHP中测试它的代码。

    <?php
    $myString = <<<HERE
    #myDiv a.awesome[href=google.com]{
    
    }
    HERE;
    $regex = "/[#\w\s\.\-\[\]\=\^\~\:]+\{[\s\n\r\t]*\}/";
    echo preg_replace($regex, "replaced!", $myString);
    
        2
  •  1
  •   Draco Ater    14 年前

    这将匹配{和}之间的零个或多个空格

    \{\s*\}
    

    \s-表示任何空格字符,包括制表符、新行等。。。

    \s*—任意数量的空格

        3
  •  1
  •   Peter Bailey    14 年前

    我不建议使用正则表达式,因为我真的怀疑CSS是一个 regular language 不管怎样。

    下载 CSS Tidy 对于PHP-我只是在5分钟内亲自完成并测试了它。效果很好。

    require( 'csstidy/class.csstidy.php' );
    
    $tidy = new csstidy();
    
    $tidy->parse( "
    .test {
      font-weight: bold;
    }
    
    .empty {
    }
    
    .test2 {
      font-style: italic;
    }" );
    
    echo '<pre>';
    echo $tidy->print->plain();
    

    .test {
    font-weight:700;
    }
    
    .test2 {
    font-style:italic;
    }