【问题标题】:Regular expression for finding custom tags用于查找自定义标签的正则表达式
【发布时间】:2012-08-29 12:59:39
【问题描述】:

我正在尝试从文本中找到与某些自定义标签匹配的正则表达式。标签的格式始终为 [!--sometext--] 或 [!--sometext:param1--]、[!--sometext:param1:param2--]。我需要做的是分别获取“sometext”部分和可选参数作为“param1:param2”或“param1”和“param2”(没关系)。

我对没有参数的标签的方法是

\[!--(.+?)--\]

但是如何以优雅的方式匹配参数部分?

【问题讨论】:

    标签: regex


    【解决方案1】:

    更新:好的,第三次应该是魅力吧? ;-) 这适用于我的示例 Perl 脚本。

    这应该可以做到(我假设一个 Perl 兼容的 reg-ex ......你没有指定你用什么语言写这个):

    \[!--([^\]:]+):?([^\]-]+?)?--\]
    

    这是怎么回事?

    1. 首先我们匹配[!--
    2. 然后我们对不是:] 的任何东西进行匹配(并捕获)
    3. 然后我们匹配一个可选的冒号
    4. 然后我们对任何不是-] 的东西进行可选的非贪婪匹配(并捕获)(这应该一次捕获所有可选参数)
    5. 然后我们通过匹配--]来结束它

    您需要拆分: 上的可选参数以捕捉可能有多个参数的情况。

    【讨论】:

    • 我有类似的东西,但后来Blah [!--disclaimer_vat--] blupp [!--disclaimer_vat--] 会因为贪婪而匹配disclaimer_vat--] blupp [!--disclaimer_vat
    • 我将其更改为非贪婪变体。看看这是否适合你。我想你也可以确保你没有在最后捕获的比赛中击中]([^\]-]+?)?
    猜你喜欢
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多