日期:2014-05-18  浏览次数:20792 次

谁能帮我解释一下这个正则表达式的意义: @"#\?(?'property'\S+?)\?#"
谁能帮我解释一下这个正则表达式的意义: @"#\?(?'property'\S+?)\?#",多谢啦,就要解释每个符号的作用?

------解决方案--------------------
@--“@”符号
符下两ows表研究室的火热,当晨在“@”虽然并非C#正则表达式的“成员”,但是它经常与C#正则表达式出双入对。“@”表示,跟在它后面的字符串是个“逐字字符串”,不是很好理解,举个例子,以下两个声明是等效的:
string x="D:\\My Huang\\My Doc";
string y = @"D:\My Huang\My Doc";
事实上,如果按如下声明,C#将会报错,因为“\”在C#中用于实现转义,如“\n”换行:
string x = "D:\My Huang\My Doc";

"
# -- 匹配一个#号
\? -- 匹配一个问号
(?'property'\S+?) --正则表达式引擎会记忆“()”中匹配到的内容,作为一个“组”,该组命名为'property'
\S匹配非空白字符,+?表示重复1次或更多次,但尽可能少重复。
\? -- 匹配一个问号
## -- 匹配一个#号
"

用于匹配如:
C# code
             Console.WriteLine(regex.IsMatch("#?abc#")); // false
            Console.WriteLine(regex.IsMatch("#?abc"));// false
            Console.WriteLine(regex.IsMatch("?abc#"));// false
            Console.WriteLine(regex.IsMatch("#?abc?#"));// true
            Console.WriteLine(regex.IsMatch("#?c?#"));// true

------解决方案--------------------
UP
------解决方案--------------------
匹配用“#?”开头,用“?#”结尾的中间没有空白字符的字符串
如 "#?HelloWorld?#"
但是不匹配 "#?Hello World?#" 因为中间有空格 空格不属于\S

这种情况 "#?Hello?#World?#" 正则会匹配 "#?Hello?#"
因为 \S+? 构成的正则是懒惰的 也就是和一楼所说的尽可能少匹配