Php 正则表达式来匹配CSS文件中的特定javaDoc属性,并提取有关CSS定义的数据
我正在尝试存储一些关于CSS样式的元数据,我们的应用程序可以使用这些元数据构建菜单,允许用户选择这些样式(以及其他内容) 我认为JavaDoc风格的注释是最好的方法,并使用类似Php 正则表达式来匹配CSS文件中的特定javaDoc属性,并提取有关CSS定义的数据,php,css,regex,javadoc,Php,Css,Regex,Javadoc,我正在尝试存储一些关于CSS样式的元数据,我们的应用程序可以使用这些元数据构建菜单,允许用户选择这些样式(以及其他内容) 我认为JavaDoc风格的注释是最好的方法,并使用类似config或类似的属性。然后将JSON样式定义存储为该属性的值 我一直在尝试编写一些正则表达式(PHP)来执行以下操作: 查找具有@config属性的所有JavaDoc注释 将@config的值提取为JSON对象 然后匹配下面的css标记和类名(如果它们是在下面定义的) 因此,该注释和类定义可以提取为3个匹配项 /**
config
或类似的属性。然后将JSON样式定义存储为该属性的值
我一直在尝试编写一些正则表达式(PHP)来执行以下操作:
@config
属性的所有JavaDoc注释@config
的值提取为JSON对象/**
* @config {name:'Orange Title', order:1}
*/
h1.title_orange {
}
- 匹配1:
{name:'Orange Title',顺序:1}
- 匹配2:
h1
- 匹配3:
title\u orange
更复杂的是JSON部分可能是多行的,多行可能包含也可能不包含
*
最大的任务在于您所做的假设(要测试哪些内容):
你可以在这里测试它
我假设您在javaDoc的第一个注释行中有config,我还假设在这些注释行之间可能有多个空格,您的单词/类/id可能有-
你还需要什么
编辑
这在Rubular中非常有效。尽管不同语言的正则表达式应该是相同的,但这在–4分钟前似乎不起作用
你说得对,所以我将其压缩到一个匹配组中(你必须单击preg_match_all选项卡):
也就是说,我将javaDoc和CSS放在一起考虑(javaDoc有几行代码)。尽管如此,仍有可能需要进行调整
编辑2
太棒了,非常感谢!如果@config不总是注释中的第一个条目呢?这还有可能吗?——7分钟前 它是:
\/[*]{2}(?:[\s\n\r]+.*)*[\s\n\r]+\*\s@config\s(.*)[\s\n\r]+.*[\s\n\r]+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{
你可以试试这个
编辑3
马特将自己的正则表达式进化为。问题似乎是捕获组不能无限期地重复(以获取所有CSS类/ID):
因此,这仍然需要解决…伟大的工作!很抱歉删除我的评论。我删除它是因为你原来的正则表达式在preg_split选项卡上工作。但是这个新的正则表达式更好!我认为开头的部分,
\/\*\*
可以替换为/[*]{2}
,使正则表达式变得更简单。这太棒了,非常感谢!如果@config不总是注释中的第一个条目呢?还有可能吗?@Armfoot非常感谢你在这方面的帮助,救生员!Iv'e试图修改你的例子,这样我们就可以在评论结构上有更多的自由,我离你很近了。。但最后一部分让我困惑。我们如何允许它支持多个逗号分隔的声明(参见示例链接)考虑到这一点,我可能只需要匹配整个CSS声明(标记/id/类部分),然后再进行处理,看看是否有,如果是类、id或标记等。这使得reg ex更简单,而且无论如何我都需要检查类型。。。。
\/[*]{2}[\s\n\r]+\*\s@config\s(.*)[\s\n\r]+.*[\s\n\r]+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{
\/[*]{2}(?:[\s\n\r]+.*)*[\s\n\r]+\*\s@config\s(.*)[\s\n\r]+.*[\s\n\r]+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{
(?:[\#\.\,]([\w-]+)\s*)*