我正在尝试使用regex从css文件中获取类。我需要在匹配字符串的开始和结束之间上课,因为大多数类都以相同的前缀开始,如myy-
classname,然后是它的规则,所以我把{
作为终点,因为我只需要取类名。例如
.myy-foobar{
/*CSS Rules goes here*/
}
.myy-anotherbar{
/*CSS Rules goes here*/
}
现在我需要采取foobar,另一个bar使用正则表达式,所以我使用这个preg_match_all
preg_match_all('/^myy-[(.*)]{$/', $file, $match);
var_dump($match);
根据我的理解,它应该以myy开始-所以我将^myy-
和任何字符放在这之间,所以我使用[]
并以{结束,所以我使用{$
和
preg_match_all('/(myy-)(.*)({)/', $file, $match);
var_dump($match);
这里也是相同的逻辑(以myy-和任何字符开始,以{结束),我尝试了不同的语法,但没有任何帮助。
文件中有很多类,所以我只需要取所有类的中间部分,因为我已经知道前缀了。
有人能帮忙吗?
只匹配名称,使用'.myy-'K[^{'s]+(?='s*{)
$regex = '~'.myy-'K[^{'s]+(?='s*{)~';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[0]);
查看Regex Demo中的匹配。
-
'K
告诉引擎放弃与最终匹配的匹配,它返回 -
[^{'s]+
匹配任何非{
或空白字符的字符(这是匹配) - 前瞻
(?='s*{)
断言后面是可选的空白字符和{
'.myy-
匹配.myy-
要匹配整个类,请使用:'.myy-.*?}
$regex = '~'.myy-.*?}s~';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[0]);
最长的匹配。贪婪的.*
首先匹配整个字符串,然后只回溯到需要允许下一个标记匹配。因此,您经常会超过您希望匹配结束的位置(最长匹配)。
最短匹配。延迟.*?
(由?
"延迟")意味着点只匹配允许下一个标记匹配(最短匹配)所需的尽可能多的字符。
- Regex的多级贪婪
- 星号和加号重复
下面的代码将匹配.myy-
之后的文本,直到下一个{
符号
preg_match_all('~'.myy-'K[^{]*(?={)~', $file, $match);
var_dump($match);
演示或
下面的代码将匹配.myy-
之后的文本,直到下一个{
符号或:
符号。
preg_match_all('~'.myy-'K[^{:]*(?={|:)~', $file, $match);
var_dump($match);
演示解释:
-
'.myy-
匹配字符串.myy-
-
'K
丢弃先前匹配的字符。 -
[^{]*
匹配非{
字符0次或0次以上。 -
(?={)
仅当后面的字符必须是{
左花括号时使用。(?=)
称为正向正向查找