我有一个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可以继续匹配跨越多行的字符串吗?
请帮我解决这个模式。
答案 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>.*?)
部分将继续跨越尝试查找匹配的行。