正则表达式将缺失的选择器添加到无效的 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 

(?&lt;=\A|\) 确保在 之前只有一个东西(除了空格)是字符串的开始或结束。 (感谢Casimir et Hippolyte 指出问题所在。)

Here's a regex101 demo.

为什么你的尝试失败了

这个

/([^a-z0-9\)\];\-_]*\)/i

没有按照你的想法做。

( 启动捕获组 [^a-z0-9\)\];\-_] 需要 a-z0-9)];-_ 以外的字符 * 零次或多次 \ 需要 ) 结束捕获组

但它没有^,因此它不绑定到行首,也不会验证 之前的任何内容(应该只是字符串的开头、空格或)。因此,它将匹配示例 CSS 中包含一系列空格或其他非字母数字字符(不包括 )];-_)的任何地方:

See this regex101 demo for a fuller explanation and example matches.

【讨论】:

感谢@EdCottrell,这正是我需要的。我也非常感谢您的解释。

以上是关于正则表达式将缺失的选择器添加到无效的 CSS的主要内容,如果未能解决你的问题,请参考以下文章

带有正则表达式的 CSS2 属性选择器

Python网络爬虫四大选择器(正则表达式BS4XpathCSS)总结

Python网络爬虫四大选择器(正则表达式BS4XpathCSS)总结

jquery,$,选择器,正则表达式

Jmeter之正则表达式提取器应用

正则表达式学习小结