通过正则表达式解析CSS

2024-01-16

我正在创建一个 CSS 编辑器,并尝试创建一个可以从 CSS 文档获取数据的正则表达式。如果我有一个属性,则此正则表达式有效,但无法让它适用于所有属性。我在 PHP 中使用 preg/perl 语法。

Regex

(?<selector>[A-Za-z]+[\s]*)[\s]*{[\s]*((?<properties>[A-Za-z0-9-_]+)[\s]*:[\s]*(?<values>[A-Za-z0-9#, ]+);[\s]*)*[\s]*}

测试用例

body { background: #f00; font: 12px Arial; }

预期结果

Array(
    [0] => Array(
            [0] => body { background: #f00; font: 12px Arial; }
            [selector] => Array(
                [0] => body
            )
            [1] => Array(
                [0] => body
            )
            [2] => font: 12px Arial; 
            [properties] => Array(
                [0] => font
            )
            [3] => Array(
                [0] => font
            )
            [values] => Array(
                [0] => 12px Arial
                [1] => background: #f00
            )
            [4] => Array(
                [0] => 12px Arial
                [1] => background: #f00
            )
        )
)

真正的结果

Array(
    [0] => Array
        (
            [0] => body { background: #f00; font: 12px Arial; }
            [selector] => body 
            [1] => body 
            [2] => font: 12px Arial; 
            [properties] => font
            [3] => font
            [values] => 12px Arial
            [4] => 12px Arial
        )
    )

预先感谢您的帮助 - 这让我整个下午都感到困惑!


对于单个正则表达式来说,这似乎太复杂了。好吧,我确信通过正确的扩展,高级用户可以创建正确的正则表达式。但随后您需要更高级的用户来调试它。

相反,我建议使用正则表达式来提取各个部分,然后分别对每个部分进行标记。例如。,

/([^{])\s*\{\s*([^}]*?)\s*}/

然后,您最终会在不同的字段中得到选择器和属性,然后将它们分开。 (即使是选择器解析起来也会很有趣。)请注意,如果 } 可以出现在引号或其他内容中,即使这样也会很麻烦。您可以再次将其复杂化以避免这种情况,但最好在这里完全避免正则表达式,并通过一次解析一个字段来处理它,也许使用递归下降解析器或 yacc/bison 或任何。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过正则表达式解析CSS 的相关文章

  • StrRev() 不支持 UTF-8 [重复]

    这个问题在这里已经有答案了 我正在尝试编写一个代码来替换非阿拉伯支持的程序中支持的阿拉伯文本因为我需要在替换后反转文本 但它显示一些垃圾内容而不是想要的结果 这是代码 结果 After Reverse 我需要它是原来的样子 但相反 不是垃圾
  • 在路线中使用中间件的车队购物车,但我在项目中找不到任何 $routemiddleware...甚至在 kernel.php 中也找不到...我在哪里可以找到它?

    在路线中使用中间件的车队购物车 但我在项目中找不到任何 routemiddleware 甚至在 kernel php 中也找不到 我在哪里可以找到它 Laravel 版本 5 7 护照版本 7 5 CMS 舰队购物车 内核 php name
  • 字符串的渐进单词组合

    我需要获得字符串的渐进单词组合 例如 这是字符串 输出 这是字符串 这是 这个字符串 是字符串 这 是 细绳 你知道类似的算法吗 我需要php语言 谢谢 这是解决您问题的简单代码 我将每个字符串递归地连接到数组中的其余字符串 string
  • 传递表单变量的安全方式

    我正在为我的 WordPress 主题构建联系表单 我希望能够从后端输入接收者地址 目前我正在传递带有隐藏输入字段的变量
  • MySQL ifnull 相当于 php

    我的场景 exTime get cfg var session gc maxlifetime get cfg var session gc maxlifetime 1440 我希望它像 mysql 一样 exTime isnull get
  • 使用 php 将 swf 转为 pdf

    有没有办法使用 php 将 SWF 转换为 pdf 我的意思是该页面有一个按钮 单击它必须将 swf 内容导出为 pdf 格式 您可以尝试的一种方法是使用ffmpeg http www ffmpeg org 使用 image2 输出编解码器
  • Gmail 搜索怎么这么快?

    搜索这么多字符的最有效方法是什么 你怎么认为 假设网站是用 PHP 和 MySQL 构建的 我应该学习什么才能尽可能有效地构建它 有什么我应该学习的算法吗 文本索引算法 https stackoverflow com questions 4
  • 使用带有字边界的 mgsub 函数作为替换值

    我试图用空格替换向量中字符串元素的子字符串 以下是我们正在考虑的向量 test lt c PALMA DE MALLORCA THE RICH AND THE POOR A CAMEL IN THE DESERT SANTANDER SL
  • Preg在html标签之间匹配php中的文本

    您好 我想在 PHP 中使用 preg match 从 html 文档中解析出以下内容中的 所需文本 p class review Desired text p 通常我会使用 simple html dom 来做这样的事情 但在这种情况下它
  • 如何在chart.js中使用JSON数据?

    您好 我一直在尝试使用 MYSQL 数据库中的数据 并使用它们通过 Chart js 创建图形图表 我将数据编码为 JSON 数据 通过 php 文件名 data1 php 现在我需要使用 Jquery 或 javascript 将这些 J
  • h1、h2、h3.. 元素吃掉 div 边距

    为什么 h1 h2 h3 元素在 div 中的边距会被忽略 http jsfiddle net TzmdZ http jsfiddle net TzmdZ div class col h3 This is header h3 div div
  • 分页当前链接未突出显示

    我遇到了一个奇怪的问题 我当前的分页链接未突出显示 我制作的分页网址如下所示 site com list 50 some value 一切工作正常 但当前视图中的分页链接未突出显示 我检查了CSS 没问题 我猜问题出在库上 这是我的代码 我
  • Laravel - 重复键批量插入更新大数据集

    我有大约 80k 条记录 每天需要多次运行插入 更新脚本 INSERT INTO my rankings id rank VALUES 1 100 2 99 3 102 80000 3 ON DUPLICATE KEY UPDATE ran
  • 检测计算机是否可以正确支持 3D 变换

    当我检测到 webkit 时 我使用 3D Transforms 属性添加额外的样式表 尽管它在许多不同的计算机上运行良好 全部使用相同的 chrome 版本 有些无法正确渲染动画 这些是较旧的计算机 具有更便宜的显卡 我猜这就是导致问题的
  • php 区分中文和英文字符

    如何区分中文和英文字符for loops 这是代码
  • 将延期交货库存状态添加到 Woocommerce 可变产品下拉列表中

    我想在下拉菜单中显示可变产品的库存状态 包括 缺货 因为我网站上的大多数产品都缺货 而不是 缺货 我已经尝试过答案如何将变体库存状态添加到 Woocommerce 产品变体下拉列表中 https stackoverflow com ques
  • Yii:使用与控制器布局不同的布局渲染动作

    在 Yii 中 有没有办法使用不同的方式渲染单个动作layout比为控制器定义的值 我有一个操作希望其格式与其他操作不同 并且文档中不清楚这是否可能 我相信您可以调用该操作 layout多变的 public function actionY
  • 正则表达式匹配 JWT

    我没有正则表达式的经验 我请求你的帮助 我需要一个正则表达式来捕获以下字符串中的 JWT contextJwt eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 eyJzdWIiOiJIZWxsbyB5b3UiLCJ
  • 如何只允许从我的 iOS 应用程序访问我的 MySQL 数据库? (使用webapp作为数据库的网关)

    我的 iOS 应用程序需要连接到 mysql 服务器 为了实现这一目标 我想创建一个 Web 应用程序 充当客户端应用程序和服务器端数据库之间的中间人 我担心的是 有人可以简单地找出我的应用程序使用的 URL 并传递他们自己的 URL 参数
  • 处理照片上传的最佳方式是什么?

    我正在为一个家庭成员的婚礼制作一个网站 他们要求的一个功能是一个照片部分 所有客人都可以在婚礼结束后前往并上传他们的照片 我说这是一个很棒的想法 然后我就去实现它 那么只有一个问题 物流 上传速度很慢 现代相机拍摄的照片很大 2 5 兆 我

随机推荐

  • 如何编辑快捷方式名称已注册文本的快捷方式属性 ®

    我正在尝试使用批处理脚本编辑快捷方式的属性 但快捷方式名称包含一个字符 因此当我运行 changeproperties bat 文件时 它无法正确读取文件名 我可以通过 powershell 完成相同的任务 我的 powershell 脚本
  • 收到表情符号反应后的 Discord.js 消息

    一旦上一条消息收到回复 是否可以让 Discord 机器人发送一条消息 我在想这样的事情 if cmd prefix list var i 0 let embed new Discord RichEmbed addField List Co
  • @StateObject 与 @ObservedObject 当外部传递但由视图拥有时

    基于这个答案 SwiftUI 中 ObservedObject 和 StateObject 有什么区别 https stackoverflow com questions 62544115 what is the difference be
  • 使用 C# 操作委托实现命令模式

    是否可以使用动作委托队列来实现 GOF 命令模式 一段时间以来 我一直在尝试解决这个问题 但我很困惑 因为我想要添加到队列中的每个可能的操作可能都有不同数量的参数 有什么建议么 我是否因为专注于命令模式而找错了方向 UPDATE 非常感谢j
  • scala currying/partials 构建函数过滤器列表

    给出以下代码 case class Config addThree Boolean true halve Boolean true timesFive Boolean true def doOps num Integer config Co
  • Scrapy、Selenium 或 Mechanize 来抓取网络数据?

    我想从网站上抓取一些数据 基本上 该网站有一些表格显示并显示大约 50 条记录 对于更多记录 用户必须单击某个按钮 使 ajax 调用获取并显示接下来的 50 条记录 我以前有过 Selenium webdriver Python 的知识
  • 将文本在同一表格单元格中垂直和水平居中,图像向左浮动

    我知道这看起来可能是一个小问题 只是感觉应该有一个简单的解决方案 我有一种感觉 我很 SOL 但我想我应该先问一下 http jsfiddle net bczengel FSDz9 5 http jsfiddle net bczengel
  • 在 R 中使用函数参数定义全局变量

    我正在尝试在 R 中编写一个函数 该函数从数据框中删除列并返回新数据 其名称指定为函数的参数 drop lt function my data col new data new data lt lt my data col return n
  • Firefox 不尊重用户媒体(首选颜色方案:深色)

    我正在使用 MediaWiki 的 Timeless CSS 进行媒体查询 media prefers color scheme dark 为了向在操作系统级别选择深色模式的用户显示深色站点版本 当我通过 Windows 切换深色或浅色模式
  • NSInvocableOperation 和 NSBlockOperation 有什么区别

    Foundation Framework中共有三个操作类 NSOperation NSInvocationOperation and NSBlockOperation 我已经读过并发编程指南 https developer apple co
  • threading.Timer - 每“n”秒重复一次函数

    我想每 0 5 秒触发一个函数 并且能够启动 停止和重置计时器 我不太了解 Python 线程的工作原理 并且在使用 Python 计时器时遇到困难 然而 我不断得到RuntimeError threads can only be star
  • 使用 OrientDB 递归遍历有向边

    我正在尝试从给定节点递归遍历出站边缘 而不是入站边缘 我想要查询结果中包含出边和出顶点 下图中 从 a 开始 我需要 a b c d e 包括边缘 但不包括 c 之后的部分 即 lt x a gt b gt c lt x gt d gt e
  • 跟踪嵌入的 YouTube 视频观看次数

    我在我的网站中嵌入了一些 YouTube 视频 我想使用 google Analytics 跟踪每个视频的观看次数 但我无法捕获任何 onClick 事件 因为视频是使用 iFrame 嵌入的 如何使用 iFrame 跟踪嵌入在我的网页中的
  • React-router 链接不起作用

    React router 的起步非常糟糕 看起来基本的东西不起作用 使用react router 2 0 0我的Link组件将URL更新为 about 但我的页面在那之后不会渲染About组件 入口点js var React require
  • 使用 Moq 模拟 EF DbContext

    我正在尝试使用模拟的 DbContext 为我的服务创建单元测试 我创建了一个界面IDbContext具有以下功能 public interface IDbContext IDisposable IDbSet
  • 跨浏览器 nowrap 文本区域

    我正在寻找一种跨浏览器解决方案 文本区域 文字换行only输入时 滚动条都隐藏 直到文本溢出 我已经尝试了几乎所有可以在SO中找到的东西 失败 1 textarea white space nowrap overflow auto 在 FF
  • 最好的免费测试跟踪软件是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Vuejs 和 Vue.set(),更新键/值数组

    我想弄清楚如何this set aka Vue set api 在使用它更新多维数组时起作用 Given new Vue el app data rows id 4 edit true id 5 edit false 我将如何使用 this
  • 为什么 data.tables mutate(row_number()) 失败?

    当我尝试使用时row number from dplyr在 data table 上 它会抛出错误 这是一个例子 library dplyr library data table mine lt data table a 1 10 mine
  • 通过正则表达式解析CSS

    我正在创建一个 CSS 编辑器 并尝试创建一个可以从 CSS 文档获取数据的正则表达式 如果我有一个属性 则此正则表达式有效 但无法让它适用于所有属性 我在 PHP 中使用 preg perl 语法 Regex