正则表达式为<! - {tag} - >或<! - {tag(string | integer | etc)} - >?

时间:2012-07-14 12:54:52

标签: php regex

我有这些:

<!--{tag}--> 

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

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

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

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

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

PS: *参数可以是整数(没有引号)或带单引号的字符串(或双引号)。 *模式可以提取参数

中的信息

由于

3 个答案:

答案 0 :(得分:1)

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

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

您可see from the regexer表示它与您的每个测试用例相匹配。

但是,它也会匹配以下测试用例,我将其留给OP来确定如何纠正。

<!--{tag(argument1, 2)}--> (missing quotes around string arguments)
<!--{tag("argument1', 2)}--> (unmatched single and double quotes)
<!--{tag(2, "arg)}--> (missing unmatched quotes)

答案 1 :(得分:0)

<!--\{tag(\([0-9]+|'[a-zA-Z0-9]+'\))?\}-->

可能存在一些逃避问题,我现在还没有真正的环境进行测试,但该模式应该有效。

你基本上都在寻找标签,它可以选择在括号中加上两个额外的后缀之一。

答案 2 :(得分:0)

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