首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

逍遥请进~正则解决方法

2012-05-03 
逍遥请进~~正则我一直有个疑问,两个字符之间,有可能出现换行,空格,不换行,或者表种字符的组合 这种要怎么

逍遥请进~~正则
我一直有个疑问,两个字符之间,有可能出现换行,空格,不换行,或者表种字符的组合 这种要怎么写?
e.g.
<selection type="1" categ="0" parent_id="2" sel_id="3" 后面可能有更多>
我这么写
<?isn><selection[^>]*type[^>]*=[^>]*(?'type'\S*)[^>]*>
现在我是只想取type,有时候我想取 type 各 sel_id,但是=前后有可能有空格,也有可能没有,也有可能有换行,回车之类的,而且""也有可能是'',我怎么写都没写出来

[解决办法]

C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            string[] data = { "aa", "a   a", "a a", @"a                                                     a", @"aa", "a a", "a1a", "aaa" };            Console.WriteLine(@"a\s+a Singleline vs Multiline");            var result1 = data.Select((x, i) => i + ":  " + Regex.IsMatch(x, @"a\s+a", RegexOptions.Singleline).ToString());            var result2 = data.Select((x, i) => i + ":  " + Regex.IsMatch(x, @"a\s+a", RegexOptions.Multiline).ToString());            Console.WriteLine(string.Join("\r\n", result1.Zip(result2, (x, y) => x + "\t" + y)));            Console.WriteLine(@"a.+a Singleline vs Multiline");            result1 = data.Select((x, i) => i + ":  " + Regex.IsMatch(x, @"a.+a", RegexOptions.Singleline).ToString());            result2 = data.Select((x, i) => i + ":  " + Regex.IsMatch(x, @"a.+a", RegexOptions.Multiline).ToString());            Console.WriteLine(string.Join("\r\n", result1.Zip(result2, (x, y) => x + "\t" + y)));        }    }}
[解决办法]
探讨

引用:

try this
(?is)<selection[^>]*type\s*=\s*('|")(.*?)\1[^>]*sel_id\s*=\s*\1(.*?)\1[^>]*>

去第2个分组和第三个分组//1和3

多匹配出一业个” 能不能解释一下(.*?)\1 是什么意思?

[解决办法]
Assembly code
(?isn)<selection\b\s+[^>]*type[^>=]*=("(?<type>[^"]+)"|(?<type>\S+))[^>]*?sel_id[^>=]*=("(?<sel_id>[^"]+)"|(?<sel_id>\S+)) 

热点排行