php - RegEx 用于匹配 CSS 文件中的特定 javaDoc 属性,并提取有关 css 定义的数据

标签 php css regex javadoc

我正在尝试存储一些有关 CSS 样式的元数据,我们的应用程序可以使用这些元数据来构建允许用户选择这些样式(以及其他内容)的菜单。

我认为 JavaDoc 风格注释是最好的方法,并使用像 config 或类似的属性。然后将 JSON 样式定义存储为该属性的值。

我一直在尝试编写一些正则表达式(PHP)来执行以下操作:

  1. 查找所有带有 @config 属性的 JavaDoc 注释。
  2. 提取 @config 的值作为 JSON 对象
  3. 然后匹配以下 css TAG 和 CLASS 名称(如果它们在其下定义)。

因此这个注释和类定义可以提取到 3 个匹配项中。

/**
 * @config {name:'Orange Title', order:1}
 */
h1.title_orange {

}
  • 匹配 1:{name:'Orange Title', order:1}
  • 比赛 2:h1
  • 匹配 3:title_orange

让它变得更复杂的是 JSON 部分可能是多行,并且多行可能包含也可能不包含 *

最佳答案

最大的任务是你所做的假设(要测试哪些内容):

 (?:^\/\*\*[\s\n\r]+\*\s@config\s(.*)$|^\s+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{$)

你可以在这个Rubular中测试一下.

我假设你在javaDoc的第一个注释行中有配置,我还假设你可能在这些之间随机有多个空格,你的单词/类/ids可能有-

您还需要什么?

编辑

This works great in Rubular. Although regex should be the same across languages, this doesn't seem to work in PHP Live RegexAlexander 4 mins ago

你是对的,所以我将其压缩为一个匹配组和 this one seems to be working (您必须点击preg_match_all选项卡):

\/[*]{2}[\s\n\r]+\*\s@config\s(.*)[\s\n\r]+.*[\s\n\r]+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{

这意味着,我正在考虑将 javaDoc 和 CSS 放在一起(javaDoc 有几行)。尽管如此,可能还需要进行一些调整。

编辑2

Thats amazing, thanks so much! What if the @config wasn't always the first entry in the comment? Is that still possible ? – Matt Bryson 7 mins ago

它是:

\/[*]{2}(?:[\s\n\r]+.*)*[\s\n\r]+\*\s@config\s(.*)[\s\n\r]+.*[\s\n\r]+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{

你可以试试这个 PHP Live Regex in preg_match_all tab .

编辑3

Matt 将自己的正则表达式发展为 something simpler 。问题似乎是捕获组不能无限重复(以获取所有 CSS 类/id):

(?:[\#\.\,]([\w-]+)\s*)*

https://regex101.com/r/jM0yH0/6

因此,这个问题还需要解决...

关于php - RegEx 用于匹配 CSS 文件中的特定 javaDoc 属性,并提取有关 css 定义的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237804/

相关文章:

css - 表格标题中的工具提示

html - 防止在 nowrap textarea 中将空格转换为不间断空格

Python:使用正则表达式获取文件行中的特定文本

php - 在对象属性中存储 PHP 闭包是否有任何已知的副作用?

php - yii2:显示日期的格式

Javascript 垂直制表符无法正常工作

javascript - 无法获得正确的js正则表达式

regex - 在 Bash 中使用捕获组重命名

php-cli 输出而不是执行

php - 有没有一种聪明的方法可以用纯数学来做到这一点