【发布时间】:2011-09-13 19:39:27
【问题描述】:
我正在尝试编写一个匹配有效 CSS 类名称结构的正则表达式。到目前为止我有这个:
$pattern = "([A-Za-z]*\.[A-Za-z]+\s*{)";
$regex = preg_match_all($pattern, $html, $matches);
但是,类名可以是我的正则表达式不匹配的以下格式:
p.my_class{
}
p.thisclas45{
}
这些只是一些案例,我环顾四周寻找如何在样式块中命名类的规则,但找不到任何东西。有谁知道类命名约定的规则在哪里?
还有其他需要考虑的情况吗?你会用什么正则表达式来匹配一个类名?
我已经使用 PHP DOM Document 类将其缩小为样式块。
【问题讨论】:
-
你的分隔符在哪里?你是说 CSS 吗?
-
在 CSS 中,类名以点开头。您的正则表达式不匹配。 :-?
-
@Tomalak - 抱歉我出于某种原因删除了它们,它是
#。 @ Álvaro - 它确实匹配它,因为我有一个*,它是.前面的 0 个或多个字符。 -
@Abs: 你在追求:(a) classname [你没有这个正确的 atm]; (b) 包括类名的选择器[看起来很对!];或 (c) 任何选择器 [您缺少大量案例]?
-
(和)(以及{}、[]和<>)可以用作分隔符,即"([A-Za-z]*\.[A-Za-z]+\s*{)"是完全有效的模式。如果使用另一个分隔符,则不需要将整个模式放在()中,即它可以是(something)或#something#,并且不需要写#(something)#,因为您将使用整个模式作为子模式 在这种情况下。