Php 仅在{display:none}之前提取CSS类名的正则表达式

Php 仅在{display:none}之前提取CSS类名的正则表达式,php,regex,Php,Regex,我找不到正确的正则表达式来提取类名。 这是我的代码: preg_match_all('@\.(.*!\.){display:none}@', '.UlEa{display:none}.RNLW{display:inline}.jc0k{display:none}.Lyhf{display:inline}', $matches); $matches是空的。 正则表达式看起来应该如何正确?请注意,正则表达式匹配一个文本,然后尽可能多地捕获除换行符以外的任何0+字符序列,直到最后一个序列,然后匹配{

我找不到正确的正则表达式来提取类名。 这是我的代码:

preg_match_all('@\.(.*!\.){display:none}@', '.UlEa{display:none}.RNLW{display:inline}.jc0k{display:none}.Lyhf{display:inline}', $matches);
$matches是空的。
正则表达式看起来应该如何正确?

请注意,正则表达式匹配一个文本
,然后尽可能多地捕获除换行符以外的任何0+字符序列,直到最后一个
序列,然后匹配
{display:none}
。因为您的文本不包含
或下一个
您没有匹配项

获取匹配项的一种方法是在组1内使用
\w+
(=一个或多个单词字符,即
[a-zA-Z0-9\]
集合中的字符)模式:

\.(\w+){display:none}

:


尝试为什么要使用
?谢谢,它能工作。当我没有使用
函数返回我1个结果:
UlEa{display:none}.RNLW{display:inline}.jc0k{display:none}.Lyhf
但是这不是OP的要求,您可以在CSS主体之前添加一个捕获所有类名/ID的版本吗+1@revo:一旦您为此提供了测试用例,当然可以。还有,试试看。在CSS块声明之前捕获所有ID/类名。@revo:只有一个CSS块具有
{display:none}
,并且匹配正确。这意味着这已经是一个不同的问题,你可以作为一个单独的问题问。此外,您还没有提到需要从该字符串中提取哪些确切值。CSS块包含的内容并不重要。只需在每个块之前添加所有ID和类名。如
id name
作为id,
class name
jc0k
作为第一个块的类名,以及
id name two
作为第二个块的id。我看到这个问题的标题非常相关,所以我认为如果您将答案的范围扩大到涵盖大多数可能的情况(供将来参考),不仅提取类名,还提取ID,那将是一件好事。
preg_match_all('@\.(\w+){display:none}@', '.UlEa{display:none}.RNLW{display:inline}.jc0k{display:none}.Lyhf{display:inline}', $matches);
print_r($matches[1]); // => Array ( [0] => UlEa [1] => jc0k  )