分组正则表达式帮助

时间:2011-06-22 20:57:23

标签: c# regex

我有这个用于定义标识符的正则表达式:

[\w|@|#|_][\w|\.|\$|@|#|_]*

我需要允许使用[group]或“group”分组的标识符组,并且允许“s”在“group”内部,你需要写“”(两个),并且[group]相同你会做的]]一个人。]

该组可能包含标识符,空格和任何这些字符中允许的任何内容: 代字号(〜) 连字符( - ) 感叹号(!) 左支撑({) 百分 (%) 右括号(}) 插入符号(^) 撇号(') &符号(&) 期间(。) 左括号(() 反斜杠() 右括号()) 口音坟墓(`)

示例:

"asda$@.asd ' a12876 ]] "" " => asda$@.asd ' a12876 ]] " 

[asda$@.asd ' a12876 ]] "" ] => asda$@.asd ' a12876 ] "" 

1 个答案:

答案 0 :(得分:1)

|中不需要任何[character classes],因为它会导致任何字符匹配。 (我假设您不希望标识符以|开头,例如。

string mystring = "[asda$@.asd ' a12876 ]] \"\" ]";
Console.WriteLine(mystring);
MatchCollection matches = 
   Regex.Matches(mystring,
                 @"[\w@#](?:[\w\.\$@#])*|\[[\w@#](?:\[\[|\]\]|[""\w\s\.\$@#'])*\]|""[\w@#](?:\""\""|['\s\[\w\.\$@#\]])*""",
                 RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
foreach (Match match in matches)
{
   string id = match.Value;
   // The first character of the match tells us which escape sequence to use
   // for the replacement.
   if (match.Value[0] == '[')
      id = id.Substring (1, id.Length - 2).Replace ("[[", "[").Replace ("]]", "]");
   else if (match.Value[0] == '"')
      id = id.Substring (1, id.Length - 2).Replace ("\"\"", "\"");
   Console.WriteLine (id);
}