正则表达式将缺失的选择器添加到无效的 CSS
Posted
技术标签:
【中文标题】正则表达式将缺失的选择器添加到无效的 CSS【英文标题】:Regex to add missing selectors to invalid CSS 【发布时间】:2016-06-10 02:47:08 【问题描述】:我正在尝试像这样转换无效的 CSS:
color:red
并使它像这样有效:
.missing_selectorcolor:red
示例 CSS:
a
color:black;
background-color:blue;
color:red
<!-- TEST -->
@media screen and (max-width:620px)
/* TEST 2 */
a.test color:blue;
p[class="test2"] color:green;
我当前的正则表达式:
/([^a-z0-9\)\];\-_]*\)/i
现场测试:
http://www.phpliveregex.com/p/eMq
【问题讨论】:
只是一个提示,不是答案,但也许这个库有帮助:github.com/sabberworm/PHP-CSS-Parser 我想,单独使用正则表达式的解决方案很容易出错。 你可以试试/^\h*\K(?=)/m
替换成.missing_selector
【参考方案1】:
解决方案
你需要使用这个:
/(?<=\A|\)(\s*)\/m
替换为:
.missing-selector
(?<=\A|\)
确保在 之前只有一个东西(除了空格)是字符串的开始或结束
。 (感谢Casimir et Hippolyte 指出问题所在。)
Here's a regex101 demo.
为什么你的尝试失败了
这个
/([^a-z0-9\)\];\-_]*\)/i
没有按照你的想法做。
(
启动捕获组
[^a-z0-9\)\];\-_]
需要 a-z
、0-9
、)
、]
、;
、-
或 _
以外的字符
*
零次或多次
\
需要
)
结束捕获组
但它没有^
,因此它不绑定到行首,也不会验证 之前的任何内容(应该只是字符串的开头、空格或
)。因此,它将匹配示例 CSS 中包含一系列空格或其他非字母数字字符(不包括
)];-_
)的任何地方:
See this regex101 demo for a fuller explanation and example matches.
【讨论】:
感谢@EdCottrell,这正是我需要的。我也非常感谢您的解释。以上是关于正则表达式将缺失的选择器添加到无效的 CSS的主要内容,如果未能解决你的问题,请参考以下文章
Python网络爬虫四大选择器(正则表达式BS4XpathCSS)总结