我正在尝试存储一些关于CSS样式的元数据,我们的应用程序可以使用它来构建菜单,允许用户选择这些样式(以及其他内容)。
我认为JavaDoc样式注释是最好的方法,并使用像config
或类似的属性。然后将JSON样式定义存储为该属性的值。
我一直在尝试编写一些RegEx(PHP)来执行以下操作:
@config
属性查找所有JavaDoc评论。@config
的值提取为JSON对象因此,此评论和类定义可以提取为3个匹配。
/**
* @config {name:'Orange Title', order:1}
*/
h1.title_orange {
}
{name:'Orange Title', order:1}
h1
title_orange
更复杂的是JSON部分可能是多行的,多行可能包含也可能不包含*
。
答案 0 :(得分:4)
最重要的任务是你做出的假设(要测试的事情):
(?:^\/\*\*[\s\n\r]+\*\s@config\s(.*)$|^\s+\*\/[\s\n\r]+[\#\.]?([\w-]+)\s*(?:[\#\.]*([\w-]+)\s*)*{$)
您可以在此Rubular中对其进行测试。
我假设您在javaDoc的第一个注释行中有配置,我还假设您可能在这些注释行之间有多个空格,您的单词/ classes / ID可能有-
。
您还需要什么?
这在Rubular中很有用。虽然正则表达式在不同语言中应该是相同的,但这似乎不适用于PHP Live Regex - Alexander 4分钟之前
你是对的,所以我把它压缩成一个匹配组并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有几行)。不过,可能需要进行调整。
太奇怪了,非常感谢!如果@config始终不是评论中的第一个条目怎么办?这还有可能吗? - Matt Bryson 7分钟前
是:
\/[*]{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。
马特将自己的正则表达式演变为something simpler。问题似乎是捕获组无法无限期地重复(获取所有CSS类/ ID):
(?:[\#\.\,]([\w-]+)\s*)*
https://regex101.com/r/jM0yH0/6
因此,这仍然需要解决......