Php 正则表达式获取匹配开始和结束之间的字符串
我正在尝试使用正则表达式从css文件中获取类。我需要在匹配字符串的开始和结束之间取类,因为大多数类都是以相同的前缀开始的,比如Php 正则表达式获取匹配开始和结束之间的字符串,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,我正在尝试使用正则表达式从css文件中获取类。我需要在匹配字符串的开始和结束之间取类,因为大多数类都是以相同的前缀开始的,比如myy-classname,后跟它的规则,所以我将{作为结束点,因为我只需要取类名。 比如说 .myy-foobar{ /*CSS Rules goes here*/ } .myy-anotherbar{ /*CSS Rules goes here*/ } 现在我需要使用regex获取f
myy-
classname,后跟它的规则,所以我将{
作为结束点,因为我只需要取类名。
比如说
.myy-foobar{
/*CSS Rules goes here*/
}
.myy-anotherbar{
/*CSS Rules goes here*/
}
现在我需要使用regex获取foobar,另一个,所以我使用了这个preg\u match\u 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*{)
查看中的匹配项
解释
匹配\.myy-
.myy-
告诉引擎放弃与其返回的最终匹配项相距甚远的匹配项\K
匹配任何不是[^{\s]+
或空白字符的字符(这是匹配项){
- lookahead
断言下面是可选的空白字符和(?=\s*{)
{
\.myy-.*?}
$regex = '~\.myy-.*?}s~';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[0]);
最长匹配。贪婪的*
首先匹配整个字符串,然后仅在需要时回溯以允许下一个标记匹配。因此,您通常会超出希望匹配结束的位置(最长匹配)
最短匹配。延迟*?
(由?
设置为“延迟”)意味着点只匹配允许下一个标记匹配(最短匹配)所需的字符数
参考
\.myy-\K[^{\s]+(?=\s*{)
查看中的匹配项
解释
匹配\.myy-
.myy-
告诉引擎放弃与其返回的最终匹配项相距甚远的匹配项\K
匹配任何不是[^{\s]+
或空白字符的字符(这是匹配项){
- lookahead
断言下面是可选的空白字符和(?=\s*{)
{
\.myy-.*?}
$regex = '~\.myy-.*?}s~';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[0]);
最长匹配。贪婪的*
首先匹配整个字符串,然后仅在需要时回溯以允许下一个标记匹配。因此,您通常会超出希望匹配结束的位置(最长匹配)
最短匹配。延迟*?
(由?
设置为“延迟”)意味着点只匹配允许下一个标记匹配(最短匹配)所需的字符数
参考
- 以下代码将与
.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
匹配任何不属于[^{]*
的字符零次或多次{
仅当以下字符必须是(?={)
开放式花括号时。{
称为正向前瞻(?=)
- 以下代码将与
.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
匹配任何不属于[^{]*
的字符零次或多次{
仅当以下字符必须是(?={)
开放式花括号时。{
称为正向前瞻(?=)
myy
我不想要这个,我有一些类似的伪css类。myy some:before{}
在这种情况下,我只需要一些我需要取之间结束的字符串{
以及:
这可能吗?仅供参考,调整完正则表达式并添加了解释。:)谢谢,这是我需要的,但我需要两个端点,就像它可能以结尾一样{
或:
所以我说了。@AvinashRaj给出了他的答案,它是有效的。是的,你的答案有效+1。但它也得到了myy
我不想要这个,我有一些伪css类,比如。myy some:before{}
在这种情况下,我只需要一些我需要取之间结束的字符串{
以及:
这可能吗?仅供参考,调整完正则表达式并添加了解释。:)谢谢,这是我需要的,但我需要两个端点,就像它可能以{
或:
结束一样。@AvinashRaj给出了他的答案,它是有效的。感谢+1的帮助。它能有两个端点吗。{
以及:
你的意思是,它可能是.myy foobar{
或.myy foobar:
Y