简单的正则表达式匹配问题?

时间:2009-10-20 05:45:17

标签: c# .net regex

我有一个stringstream,里面有很多字符串,如下所示:

  <A style="FONT-WEIGHT: bold" id=thread_title_559960       href="http://microsoft.com/forum/f80/topicName-1234/">Beautiful Topic Name</A> </DIV> 

我正在尝试获取以:

开头的相应链接
style="FONT-WEIGHT: bold

所以最后我会有链接:

http://microsoft.com/forum/f80/topicName-1234/

Topic Id:
    1234

Topic Display Name:
    Beautiful Topic Name

I am using this pattern, right now, but it doesn't do it all:
    "href=\"(?<url>.*?)\">(?<title>.*?)</A>"

因为还有其他以href开头的链接。

另外,为了使用Regex,我在一行字符串中添加了所有行。正则表达式是否关心新线? IE可以继续匹配跨越多行的字符串吗?

请帮我解决这个模式。

2 个答案:

答案 0 :(得分:4)

在正则表达式中,点通配符匹配换行符。如果您想匹配包含换行符在内的任何字符,请使用[^\x00]代替.。这匹配除了null字符之外的所有内容,这意味着它匹配所有内容。

试试这个:

<A\s+style="FONT-WEIGHT: bold"\s+id=(\S+)\s+href="([^"]*)">([^\x00]*?)</A>

如果您尝试使用双引号将其分配给字符串,则需要转义引号和反斜杠。它看起来像这样:

myVar = "<A\\s+style=\"FONT-WEIGHT: bold\"\\s+id=(\\S+)\\s+href=\"([^\"]*)\">([^\\x00]*?)</A>";

答案 1 :(得分:2)

您可以使用RegexOptions.Singleline枚举使模式中的.与换行符匹配:

  

指定单行模式。变化   点(。)的意思所以它   匹配每个字符(而不是   除了\ n)之外的每个字符。

因此,如果您的标题跨越多行,启用该选项后,模式的(?<title>.*?)部分将继续跨越尝试查找匹配的行。