VB 正则表达式有关问题 超出小弟我理解范围的一个奇怪有关问题 (本人已解决) 使用正则的大家注意了 小弟我有新发现!

求助VB 正则表达式问题 超出我理解范围的一个奇怪问题 (本人已解决) 使用正则的大家注意了 我有新发现!!
遇到了一个超出了我理解范围的问题  

编写的一个函数 处理HTML代码(从其中提取数据)
Dim Regex As RegExp
Dim matches As MatchCollection
Set Regex = New RegExp
With Regex
.Global = True
.IgnoreCase = True
End With

表达式如下  
Ptrn = "<td valign=""top"">职称</td>(?:\r)\s*?<td valign=""top"">(\S*)(?: (\S*))?</td>"
Regex.Pattern = Ptrn

问题描述:
我用一个string变量htmlstr 存储HTML代码
如下方式匹配,则匹配数为0
Set matches = Regex.Execute(htmlstr)
但是如下匹配,则为正常该有的匹配数
html.text=htmlstr
htmlstr=html.text
Set matches = Regex.Execute(htmlstr)
或者这样也可以
Set matches = Regex.Execute(html.text)


就是说 直接操纵HTML字符串 则匹配失败  
而如果将HTML代码先赋值给文本框 然后直接或间接操作文本框中的HTML代码 则成功 为什么 ??

还有我的过程中,下面还有多个使用正则表达式的地方
其他的地方都可以直接操纵HTML代码(没有经过文本框转换) 唯独第一个不可以 这个又是为什么

觉得好奇怪呀


难道问题出在(?:\r)Ptrn = "<td valign=""top"">职称</td>(?:\r)\s*?<td valign=""top"">(\S*)(?: (\S*))?</td>"


我想还是换行的地方有问题  


换成这个可以了 

Ptrn = "<td valign=""top"">职  称:</td>\s*<td valign=""top"">(.*?)(?: (.*?))?</td>

好奇怪呀  
在vb中 . 好像不包含 换行符\r \n 的 怎么这会又包含了
还有\s包含\r \n 这会又不包含了 就是怎么回事


Ptrn = "<td valign=""top"">职  称:</td>\s*<td valign=""top"">\s*(\S*)(?: (\S*))

问题解决了 是我少写一个换行符
同时发现 当文本赋值给文本框控件时 文本框控件会“吃到” 原文中的回车 估计是将\r 换成了\n 没有测试 估计的

------解决方案--------------------
这是正则表达式的表示方式,这与vb没有关系,因为你是引用了正则表达式库。

------解决方案--------------------
十有八九是回车换行处的问题了。有些网页你右击查看源代码会发现有很多黑方块。这个就是因为在unix格式下和windows下的回车换行符不同导致的。设置到textbox中,可能被自动转换了。

如果真想探个究竟,就把html代码直接读取过来写入一个文件,将数据设置到文本框,然后将text1.text的内容直接写入另外一个文件,然后用文本比较工具,看看,肯定是每行的最后出问题的。

Ptrn = "<td valign=""top"">职称</td>(?:\r)\s*?<td valign=""top"">(\S*)(?: (\S*))?</td>" 可以改为:
Ptrn = "<td valign=""top"">职称</td>(?:\r\n)\s*?<td valign=""top"">(\S*)(?: (\S*))?</td>" 或
Ptrn = "<td valign=""top"">职称</td>[\s\S]*?<td valign=""top"">(\S*)(?: (\S*))?</td>"
------解决方案--------------------
探讨

引用:
这是正则表达式的表示方式,这与vb没有关系,因为你是引用了正则表达式库。


问题已解决 注意标题及正文最后三行