2012-06-13 13 views
1

新的正则表达式。我想验证这种格式:.NET正则表达式如何到

  • 任何字符允许的,除了“{”和“}”。
  • A '{' 字符必须遵循的特定字符串的一个

这些字符串之后的任何字符可以去

  • 每个 '{' 必须有一个结束的 '}'
  • 嵌套的“{的被允许

实施例:

abc{FILE:any text} def {FILE:mno{ENV:xyz}} 

FILE:ENV:是'{'char后需要的特定字符串的示例。 我写这个正则表达式:

^ 
(
    [^\{\}]+ 
    | 
    (?<Depth>\{)(FILE:|ENV:) 
    | 
    (<-Depth>\}) 
)* 
(?(Depth)(?!)) 
$ 

,但它不符合我的需要的格式。我想念什么?
非常感谢。
编辑:做同样的,成功地我希望:-) MSDN链接,Other site

+3

正则表达式不应该被用来匹配递归元素。您必须使用一些递归的.NET代码来补充单深度正则表达式。 – qJake

+2

@SpikeX是正确的,任何嵌套代码是一个正则语法,这是复杂性正则表达式上的一步,意味着正则表达式将无法令人满意地解析它。 另外,检查出这个着名的帖子顶部的答案http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+0

@Hans一个国防部删除我的评论最后一次我链接到那个帖子......他必须享受在他的业余时间写递归正则表达式...... :) – qJake

回答

3

您的均衡组中忘记了问号。

string pattern = @"(?x) 
^ 
(?: 
    [^{}]+ 
    | 
    (?<Depth>{) (?:FILE|ENV): 
    | 
    (?<-Depth>}) 
)* 
(?(Depth)(?!)) 
$ 
"; 

应该匹配字符串喜欢a {FILE: {ENV: foo } bar } baz

+0

谢谢!很棒! – RoadBump