正则表达式出错 - 哪些角色需要逃避?

时间:2013-08-01 20:52:22

标签: c# regex

我想从网站中提取RTMP链接,并且到目前为止设法找到它所在的行:

string line = GetLine(innerHTML, "turbo:");

// The string line now contains something like this:
// turbo: 'rtmp://fcs21-1.somewebsite.com/reflect/2996910732;0',

Match match = Regex.Match(line, @"turbo: '(rtmp://[*]+);0',$",
   RegexOptions.IgnoreCase);

string key;
if (match.Success)
   key = match.Groups[1].Value;

没有任何比赛。我想从这一行中提取:

turbo: 'rtmp://fcs21-1.somewebsite.com/reflect/2996910732;0',

是这件作品:

rtmp://fcs21-1.somewebsite.com/reflect/2996910732

我在正则表达式中缺少什么?

3 个答案:

答案 0 :(得分:4)

您的角色分类 - [*]仅匹配*,量词+,匹配1个或更多*,没有别的。显然它与你的字符串不匹配。

我猜你的意思是使用.*来代替\n匹配任何字符的0次或更多次。

尝试将正则表达式更改为:

"turbo: '(rtmp://.*);0',$"

甚至更好,根据您的文字以及您想要提取的内容,您只需使用:

"turbo: '([^;]*);0',$

答案 1 :(得分:1)

[*]仅匹配*。要匹配任何字符,请更喜欢.。 (再

(实际上,.无法匹配换行符。如果可能出现换行符,则更喜欢(.|\n)的效果 - 请注意反斜杠需要转义。)

答案 2 :(得分:1)

试试这个:

Match match = Regex.Match(line, @"^turbo: '(rtmp://[^;]+);0',$", RegexOptions.IgnoreCase);

这将考虑带有^符号的字符串的开头,匹配的选择将匹配任何非;一直到实际;的内容。 }。