C#多行匹配

shellhy_cn 2014-10-16 04:28:30
GET http://www.139931.com/index.php?ac=voteimg&tid=1539&auth=1&openid=oyV8_t-mSTcQ3vqIB1GNF1OgjaKk&sign=7720E74211E159DB200E21F89E3FB580&time=1413441222 HTTP/1.1
Host: www.139931.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; HM NOTE 1LTETD Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/5.4.0.96_r804574.480 NetType/WIFI
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,en-US;q=0.8
Cookie: zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09
X-Requested-With: com.tencent.mm

我想匹配openid、sign、time、Cookie: 值,请问正则怎么写啊
string patternOfTable = string.Format("(?s)&tid={0}([a-z0-9A-Z-=&]*)&openid=([a-z0-9A-Z-_%=]+)&sign=([a-z0-9A-Z-_%=]+)&time=([0-9]+)([.\n\r]*)Cookie: ([.]*)", strid);

我这样写的,死活匹配不了
...全文
213 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxldfang 2014-10-17
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace sxLdfang
{
    class Program
    {
        static void Main(string[] args)
        {
            string html = @"GET http://www.139931.com/index.php?ac=voteimg&tid=1539&auth=1&openid=oyV8_t-mSTcQ3vqIB1GNF1OgjaKk&sign=7720E74211E159DB200E21F89E3FB580&time=1413441222 HTTP/1.1
Host: www.139931.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; HM NOTE 1LTETD Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/5.4.0.96_r804574.480 NetType/WIFI
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,en-US;q=0.8
Cookie: zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09
X-Requested-With: com.tencent.mm";
            string pattern = @"(?is)&openid=(?<openid>[^&]+)&sign=(?<sign>[^&]+)&time=(?<time>\d+).*Cookie: (?<cookie>.+?)\n";
            MatchCollection mc = Regex.Matches(html, pattern);
            foreach (Match m in mc)
            {
                Console.WriteLine("    openid:" + m.Groups["openid"].Value);
                Console.WriteLine("      sign:" + m.Groups["sign"].Value);
                Console.WriteLine("      time:" + m.Groups["time"].Value);
                Console.WriteLine("    cookie:" + m.Groups["cookie"].Value);
                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }
}


运行结果:
    openid:oyV8_t-mSTcQ3vqIB1GNF1OgjaKk
      sign:7720E74211E159DB200E21F89E3FB580
      time:1413441222
    cookie:zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09
sxldfang 2014-10-17
  • 打赏
  • 举报
回复
引用 11 楼 shellhy_cn 的回复:
文本有100多M,都是这样的GET包
你不会一下子进行 100多M 文本的正则匹配吧? 最好先把你的文本分解split 成一个一个的GET包,再分别进行正则匹配~~~ 如果你真想匹配所有的,可以这样:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace sxLdfang
{
    class Program
    {
        static void Main(string[] args)
        {
            string html = @"GET http://www.139931.com/index.php?ac=voteimg&tid=1539&auth=1&openid=oyV8_t-mSTcQ3vqIB1GNF1OgjaKk&sign=7720E74211E159DB200E21F89E3FB580&time=1413441222 HTTP/1.1
Host: www.139931.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; HM NOTE 1LTETD Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/5.4.0.96_r804574.480 NetType/WIFI
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,en-US;q=0.8
Cookie: zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09
X-Requested-With: com.tencent.mm
GET http://www.139931.com/index.php?ac=voteimg&tid=1539&auth=1&openid=oyV8_t-mSTcQ3vqIB1GNF1OgjaKk&sign=7720E74211E159DB200E21F89E3FB580&time=1413441222 HTTP/1.1
Host: www.139931.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; HM NOTE 1LTETD Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/5.4.0.96_r804574.480 NetType/WIFI
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,en-US;q=0.8
Cookie: zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09
X-Requested-With: com.tencent.mm
GET http://www.139931.com/index.php?ac=voteimg&tid=1539&auth=1&openid=oyV8_t-mSTcQ3vqIB1GNF1OgjaKk&sign=7720E74211E159DB200E21F89E3FB580&time=1413441222 HTTP/1.1
Host: www.139931.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; HM NOTE 1LTETD Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/5.4.0.96_r804574.480 NetType/WIFI
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,en-US;q=0.8
Cookie: zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09
X-Requested-With: com.tencent.mm";
            string pattern = @"(?is)&openid=(?<openid>[^&]+)&sign=(?<sign>[^&]+)&time=(?<time>\d+).*?Cookie: (?<cookie>.+?)\n";
            MatchCollection mc = Regex.Matches(html, pattern);
            foreach (Match m in mc)
            {
                Console.WriteLine("    openid:" + m.Groups["openid"].Value);
                Console.WriteLine("      sign:" + m.Groups["sign"].Value);
                Console.WriteLine("      time:" + m.Groups["time"].Value);
                Console.WriteLine("    cookie:" + m.Groups["cookie"].Value);
                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }
}


运行结果:
    openid:oyV8_t-mSTcQ3vqIB1GNF1OgjaKk
      sign:7720E74211E159DB200E21F89E3FB580
      time:1413441222
    cookie:zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09

    openid:oyV8_t-mSTcQ3vqIB1GNF1OgjaKk
      sign:7720E74211E159DB200E21F89E3FB580
      time:1413441222
    cookie:zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09

    openid:oyV8_t-mSTcQ3vqIB1GNF1OgjaKk
      sign:7720E74211E159DB200E21F89E3FB580
      time:1413441222
    cookie:zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09
shellhy_cn 2014-10-17
  • 打赏
  • 举报
回复
文本有100多M,都是这样的GET包
shellhy_cn 2014-10-17
  • 打赏
  • 举报
回复
引用 9 楼 sxldfang 的回复:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace sxLdfang
{
    class Program
    {
        static void Main(string[] args)
        {
            string html = @"GET http://www.139931.com/index.php?ac=voteimg&tid=1539&auth=1&openid=oyV8_t-mSTcQ3vqIB1GNF1OgjaKk&sign=7720E74211E159DB200E21F89E3FB580&time=1413441222 HTTP/1.1
Host: www.139931.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; HM NOTE 1LTETD Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/5.4.0.96_r804574.480 NetType/WIFI
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,en-US;q=0.8
Cookie: zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09
X-Requested-With: com.tencent.mm";
            string pattern = @"(?is)&openid=(?<openid>[^&]+)&sign=(?<sign>[^&]+)&time=(?<time>\d+).*Cookie: (?<cookie>.+?)\n";
            MatchCollection mc = Regex.Matches(html, pattern);
            foreach (Match m in mc)
            {
                Console.WriteLine("    openid:" + m.Groups["openid"].Value);
                Console.WriteLine("      sign:" + m.Groups["sign"].Value);
                Console.WriteLine("      time:" + m.Groups["time"].Value);
                Console.WriteLine("    cookie:" + m.Groups["cookie"].Value);
                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }
}


运行结果:
    openid:oyV8_t-mSTcQ3vqIB1GNF1OgjaKk
      sign:7720E74211E159DB200E21F89E3FB580
      time:1413441222
    cookie:zdNa_2132_saltkey=b408wFAt; zdNa_2132_lastvisit=1413437620; zdNa_2132_sid=EXkZII; zdNa_2132_lastact=1413441220%09index.php%09
那个文本中很多个这样的数据,这样就出错了,这个正则会匹配第一个get包的url部分和最后一个get包的cookie,而不是每个包的
shellhy_cn 2014-10-16
  • 打赏
  • 举报
回复
引用 6 楼 l397870376 的回复:

openid=(?<openid>[\s\S]*?)&sign=(?<sign>[\s\S]*?)&time=(?<time>[\s\S]*?)[\s\S]*?Cookie:(?<cookie>[\s\S]*?)[\s\S]*?
你自己 再修改一下 可以把 这个正则 提出来 单个匹配
匹配到其他内容了
shellhy_cn 2014-10-16
  • 打赏
  • 举报
回复
多次提取出来的数据没用了,这些数据是有联系的
_小黑_ 2014-10-16
  • 打赏
  • 举报
回复

openid=(?<openid>[\s\S]*?)&sign=(?<sign>[\s\S]*?)&time=(?<time>[\s\S]*?)[\s\S]*?Cookie:(?<cookie>[\s\S]*?)[\s\S]*?
你自己 再修改一下 可以把 这个正则 提出来 单个匹配
shellhy_cn 2014-10-16
  • 打赏
  • 举报
回复
是在文本文件中的,有几M大
rayyu1989 2014-10-16
  • 打赏
  • 举报
回复
建议你单独取某个参数 多取几次,因为参数是没有顺序的
衣舞晨风 2014-10-16
  • 打赏
  • 举报
回复
是不是可以通过IndexOf与Substring来实现呢?
衣舞晨风 2014-10-16
  • 打赏
  • 举报
回复
在你这个例子中openid、sign、time、Cookie的值应该是多少呢?
shellhy_cn 2014-10-16
  • 打赏
  • 举报
回复
没啥分了,但如果解决了,我可以出钱哈

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧