正则表达式用于查找自定义标记

时间:2012-08-29 12:59:40

标签: regex

我正在尝试查找与文本中的某些自定义标记匹配的正则表达式。标签的格式总是[! - sometext--]或[! - sometext:param1--],[! - sometext:param1:param2--]。我需要做的是将“sometext”部分和可选参数分别取为“param1:param2”或“param1”和“param2”(无关紧要)。

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

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

但我如何以优雅的方式匹配params部分?

1 个答案:

答案 0 :(得分:1)

更新:好的,第三次应该是魅力吧? ;-)这对我来说是一个Perl脚本示例。

这应该这样做(我假设一个与Perl兼容的注册表...你没有指定你在写这个语言的语言):

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

这里发生了什么?

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

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