正则表达式 - 第一步

我第一次想在 C# 中使用正则表达式。我在 SQL Server 中流畅地使用它们,但与我在这里经历的相比,它非常容易......


首先,我想解决简单的字符串(取自另一个问题):


static void Main(string[] args)

{

    string FullString = "[http: Something] One Two Three[http: AnotherOne] Four[http: BlahBlah] sdksaod,cne 9ofew {}@:P{";

    Regex regex = new Regex(".*[[]http:.*[]]");


    foreach (Match match in regex.Matches(FullString))

    {

        Console.WriteLine(match.Value);

    }

    Console.ReadKey();

}

我希望我会在[http: Something]..., [http: AnotherOne]...和处收到匹配项[http: BlahBlah]...,但是在当前尝试中,匹配开始于[http: AnotherOne]...和结束于之前[http: BlahBlah],如果我.*在模式末尾添加,则匹配是整个字符串。


我很好奇,为什么它只给了我一场比赛而不是三场预期的比赛。我正在浏览正则表达式手册和其他帖子,但无法理解。


获得这些匹配项的有效模式是什么?(我不需要详细解释,我想我会弄清楚自己会得到什么)。


一切都归结于此(以防我不清楚)


我想匹配[http:...],其中三个点可以是任何东西。


宝慕林4294392
浏览 134回答 2
2回答

绝地无双

你需要Regex regex = new Regex(@"(\[http:.*?])");该@是一个字符串(也可以使用\\字符串中代替)。在(开始捕获组。该\逃逸以下[否则[将是一个字符类的开始。这?使得*非贪婪。

Smart猫小萌

尝试以下模式:@"\[http:[^\]]*\]". 这意味着“匹配以 开头的字符序列[http,然后具有任何长度的任何字符的序列,除了 ],然后以]”结尾。编辑:* Andrew Morton 建议的非贪婪版本是[^\]].
打开App,查看更多内容
随时随地看视频慕课网APP