首页 新闻 会员 周边

关于正则表达式问题,不解,求助!

0
悬赏园豆:30 [已解决问题] 解决于 2015-01-15 17:20

文字片段:

<head><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /><title>
知识管理平台
</title>

需要获取title标签内的文字,即:知识管理平台,我写的正则表达式如下:

string pattern = @"<title>([\t\n]*)(.*)(\1)</title>";
            Regex reg = new Regex(pattern,RegexOptions.Multiline);
            string result = reg.Match(pageHtml).Groups[1].Value;

在WINFORM程序中运行,怎么也获取不到,但我用网页测试工具是可以获取的,很是不解,JS与C#正则表达式难道不同???求助高手解答,谢谢!

梦在旅途的主页 梦在旅途 | 初学一级 | 园豆:10
提问于:2015-01-15 15:39
< >
分享
最佳答案
0

(?<=<title>)([\t\n]*)(.*)(\1)(?=</title>)

 

如果按你的,就要取 

 

string result = reg.Match(pageHtml).Groups[2].Value;

收获园豆:30
Yu | 专家六级 |园豆:12980 | 2015-01-15 15:52

谢谢你的热心回答,我用了你的正则表达式,试过也不行,但我稍作修改就可以了:

string pattern = @"(?<=<title>)([\t\r\n]*)(.*)(\1)(?=</title>)";
            Regex reg = new Regex(pattern);
            string result = reg.Match(userInfoResult).Groups[2].Value;

原因是少个\r,可能是JS与C#对正则表达式的解析有所不同造成的,当然这解析成功后,在字符串前面还多了一个\t,这又是咋回事,该如何解决,还请指教,谢谢!

梦在旅途 | 园豆:10 (初学一级) | 2015-01-15 16:08

@梦在旅途: 

可以使用

 

RegexOptions.Singleline

 

代替

 

RegexOptions.Multiline

Yu | 园豆:12980 (专家六级) | 2015-01-15 16:14

@梦在旅途: 对于 \t  我这解析出来是没有的

Yu | 园豆:12980 (专家六级) | 2015-01-15 16:21

@Yu: 你要看我的截图里面的内容,标题文字前面是有换行加TAB键的

梦在旅途 | 园豆:10 (初学一级) | 2015-01-15 16:54

@梦在旅途:  都匹配进Groups[1] 了

Yu | 园豆:12980 (专家六级) | 2015-01-15 16:58

@Yu: 但Groups[2]中还包含有\t,不知道什么问题,如下图示:

梦在旅途 | 园豆:10 (初学一级) | 2015-01-15 17:01

@梦在旅途: 这是由于后面(\1)没有\t,所以前面就最小匹配\r\n

Yu | 园豆:12980 (专家六级) | 2015-01-15 17:10

@梦在旅途: 

 

这样就不会

 

(?<=<title>)([\r\n\t]*)(.*?)([\r\n\t]*)(?=</title>)

Yu | 园豆:12980 (专家六级) | 2015-01-15 17:11

@Yu: 经你提点,确实无问题了,非常感谢!可能对分组不太熟!

梦在旅途 | 园豆:10 (初学一级) | 2015-01-15 17:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册