0

我想从一个网站中提取一个 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

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

4

3 回答 3

4

您的字符类 -[*]仅匹配 a *,与 quantifier+匹配,匹配 1 或更多*,仅此而已。显然它与您的字符串不匹配。

我猜你打算.*改用它,它匹配 0 次或多次出现的任何字符,但\n.

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

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

甚至更好,给定您的文本以及您要提取的内容,您可以简单地使用:

"turbo: '([^;]*);0',$
于 2013-08-01T20:56:16.963 回答
1

[*]仅匹配*. 要匹配任何字符,首选.. (回覆

(实际上,.无法匹配换行符。如果可能出现换行符,请选择具有以下效果的东西(.|\n)——注意反斜杠需要转义。)

于 2013-08-01T20:57:45.500 回答
1

尝试这个:

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

这将考虑到带有^符号的字符串的开头,并且匹配的选择将匹配任何不是 a;一直到实际的;.

于 2013-08-01T21:04:18.983 回答