-4

我有这些:

<!--{tag}--> 

<!--{tag(integer)}-->

<!--{tag('argument1')}-->

<!--{tag('argument1', 'argument2',... 'argumentn')}-->

我正在寻找可以处理所有这些的单一模式,我已经尝试过第一个模式,但我不知道第二个模式到第四个:

<!--\{tag\}-->

ps: *argument 可以是整数(不带引号)或带单引号(或双引号)的字符串。*模式可以提取参数中的信息

谢谢

4

3 回答 3

1

它不漂亮,但这就是我想出的:

<!--\{tag(?:\(((?:\d+)|(?:'\w+')|(?:(?:['"]?\w+['"]?,\s*){1,}['"]?[\w\d]+['"]?))\))?\}-->

您可以从正则表达式中看到它匹配您的每一个测试用例。

但是,它也将匹配以下测试用例,我将由 OP 来确定如何更正。

<!--{tag(argument1, 2)}--> (missing quotes around string arguments)
<!--{tag("argument1', 2)}--> (unmatched single and double quotes)
<!--{tag(2, "arg)}--> (missing unmatched quotes)
于 2012-07-14T13:10:28.253 回答
0
<!--\{tag(\([0-9]+|'[a-zA-Z0-9]+'\))?\}-->

可能有一些逃逸的问题,我现在真的没有要测试的环境,但是该模式应该可以工作。

您基本上是在寻找标签,它可以选择在括号中包含两个额外的后缀之一。

于 2012-07-14T12:57:55.597 回答
0

使用此正则表达式<!--\{tag.*?\}--> 进行提取参数使用(?<=<!--\{tag).*?(?=\}-->)

于 2012-07-14T12:58:42.057 回答