字符集无关紧要。允许的字符更重要。检查CSS规范。这里是相关的:
在CSS中,标识符(包括选择器中的元素名称,类和ID
)只能包含字符[a-zA-Z0-9]和ISO 10646U+00A0及更高版本的字符,以及连字符(-)和下划线(_);它们不能以数字,两个连字符或连字符后跟数字开头。标识符还可以包含转义字符和任何ISO
10646字符作为数字代码(请参阅下一项)。例如,标识符"B&W?"可以写为"B&W?"或"B26 W3F"。
更新
:关于正则表达式问题,您可以在这里找到语法:
ident -?{nmstart}{nmchar}*其中包含以下部分:
nmstart [_a-z]|{nonascii}|{escape}nmchar [_a-z0-9-]|{nonascii}|{escape}nonascii [240-377]escape {unipre}|\[^rnf0-9a-f]unipre \{h}{1,6}(rn|[ trnf])?h [0-9a-f]可以将其转换为Java正则表达式,如下所示(我仅将括号添加到包含OR的部分,并转义了反斜杠):
String h = "[0-9a-f]";String unipre = "\\{h}{1,6}(\r\n|[ \t\r\n\f])?".replace("{h}", h);String escape = "({unipre}|\\[^\r\n\f0-9a-f])".replace("{unipre}", unipre);String nonascii = "[\240-\377]";String nmchar = "([_a-z0-9-]|{nonascii}|{escape})".replace("{nonascii}", nonascii).replace("{escape}", escape);String nmstart = "([_a-z]|{nonascii}|{escape})".replace("{nonascii}", nonascii).replace("{escape}", escape);String ident = "-?{nmstart}{nmchar}*".replace("{nmstart}", nmstart).replace("{nmchar}", nmchar);System.out.println(ident); // The full regex.更新2 :哦,您更像是一个PHP使用者,好吧,我认为您可以确定如何/在哪里做
str_replace?



