<(.+)>(?:<!\[CDATA\[(?<a>[^<>\[\]]+)\]\]>|(?<a>[^<>\[\]]+))</\1>
解决方案 »
- 函数调用的问题
- C#语音视频
- membership三种角色的编辑
- 菜鸟提问:如何做自己的友好提示框Winform
- 搜遍所有論壇都沒法解決的超難問題:請問DataReader如何返回一個DataTable?
- .net DataDynamics.ActiveReports.CurrentPage.CanvasItems
- 怎么实现在listview里面用鼠标选择多行啊??
- C# 中如何实现这一联合体???
- textbox KeyPress只能输入数字(包括“-”,“.”)问题
- ***C#里有没有类似vb里Do Events的东东?****
- C#引C++ struct 参数问题求助
- 求教用WCF实现类似SQL作业一样定时执行的服务
(?<=<PicUrl><!\[CDATA\[|<PicUrl>)[^<![CDATA[][\s\S]*?(?=\]\]></PicUrl>|</PicUrl>)
(?(cdata)(?=\]\]>\s*</\1>)|(?=\s*</\1>))
这个判定表达式,为毛没起作用…
MatchCollection mc = Regex.Matches(txt, @"(?i)<((?!>).)+>(?<value>[a-z0-9-]+)</((?!>).)+>|<((?!>).)+><\!\[cdata\[(?<value>((?!]).)+)\]\]></((?!>).)+>");
foreach (Match m in mc)
{
Console.WriteLine(m.Groups["value"].Value);
}
只是纠结“正则”问题,一个讨论而已,就事论事的讨论,至于这里是否适合用正则,其实你们不说,我就不知道了么?呵呵。那另开一个帖子讨论你们想讨论的问题好了。
如何存储和读取XML节点(非完整XML)
如果字符串是
<PicUrl><![CDATA[6701adb8-86a4-43d3-8fc6-bb11c66ad438</PicUrl>
(?<cdata><!\[CDATA\[)?
表达式匹配,但分组捕获成功。
所以认为应该是
(?(cdata)(\]\]>\s*</\1>)|(?=\s*</\1>))
执行yes段:(\]\]>\s*</\1>),发现不存在]]>,整个表达式结果应当是失配的,但正则表达式的一个关键是为了匹配,所以此时并不会返回失配,而是会回溯,让cdata分组失配,使用.+?匹配,则可以执行no段的表达式
尝试使用no段:(?=\s*</\1>)
结果就导致了整个表达式的匹配。这就是我自己误解的为什么(?(exp)yes|no)不起作用了,不是不起作用,而是为了整个表达式的成立,所以和我预期的顺序不同,我忽略了回溯的可能。明白了,等会儿晚上结贴。