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 )