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

时间:2015-05-14 12:47:58

标签: php css regex javadoc

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

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

我一直在尝试编写一些RegEx(PHP)来执行以下操作:

  1. 使用@config属性查找所有JavaDoc评论。
  2. @config的值提取为JSON对象
  3. 然后匹配以下css TAG和CLASS名称(如果已在其下定义。
  4. 因此,此评论和类定义可以提取为3个匹配。

    /**
     * @config {name:'Orange Title', order:1}
     */
    h1.title_orange {
    
    }
    
    • 匹配1 {name:'Orange Title', order:1}
    • 匹配2 h1
    • 匹配3 title_orange

    更复杂的是JSON部分可能是多行的,多行可能包含也可能不包含*

1 个答案:

答案 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有几行)。不过,可能需要进行调整。

EDIT2

  

太奇怪了,非常感谢!如果@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

EDIT3

马特将自己的正则表达式演变为something simpler。问题似乎是捕获组无法无限期地重复(获取所有CSS类/ ID):

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

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

因此,这仍然需要解决......