Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匹配特定单词的正则表达式+;括号内的内容_C#_Regex_Regex Negation - Fatal编程技术网

C# 匹配特定单词的正则表达式+;括号内的内容

C# 匹配特定单词的正则表达式+;括号内的内容,c#,regex,regex-negation,C#,Regex,Regex Negation,我正在创建一个post系统,在该系统中,我将使用[image:http://anything/anyimage.jpg]或[silverlight:http://anothersite/ilovesilverlight.xap]等等,我将在找到链接后呈现HTML的对象标记。我被regex困住了,我对regex很陌生,所以请在回答时保持建设性,这有什么问题: if (text.Contains("[flash:")) { rgx = new

我正在创建一个post系统,在该系统中,我将使用[image:http://anything/anyimage.jpg]或[silverlight:http://anothersite/ilovesilverlight.xap]等等,我将在找到链接后呈现HTML的对象标记。我被regex困住了,我对regex很陌生,所以请在回答时保持建设性,这有什么问题:

        if (text.Contains("[flash:"))
        {
            rgx = new Regex(@"\[flash:(.^\])\]");
            text = rgx.Replace(text, (m =>
            {
                string val = m.Groups[1].Value;
                FlashRenderer ir = new FlashRenderer(val);
                return ir.Render();
            }));
        }
忘记
FlashRenderer
和它返回的内容吧,我的问题是匹配。 我进入if块,但找不到任何与regex匹配的实例,尽管我已经找到了。我可以在一篇文章中包含多个外部对象,所以我要做的是否定匹配中的
]
字符。如果我不否定
]
,如果我只有一个对象而没有其他
]
字符,那就没有问题了,但是如果我有更多的
]
,那么一切都会变得一团糟,因为第一个正则表达式与整个帖子上最后出现的
]
匹配,并将整个帖子的其余部分作为假定的“URL”返回.

试试这个:

newregex(@“\[flash:([^\]]+)\]”;
\[flash:#前缀
(#捕获组
[^\]+#一个或多个字符,除了]
)               #
\]#后缀
试试这个:

newregex(@“\[flash:([^\]]+)\]”;
\[flash:#前缀
(#捕获组
[^\]+#一个或多个字符,除了]
)               #
\]#后缀

您可以使用所谓的“非贪婪量词”,这意味着它在仍然匹配的情况下尽可能少地吃掉字符,而默认(贪婪)量词在仍然匹配的情况下吃掉尽可能多的字符。在量词(如
*
+
)后面加一个
,使其不贪婪:

new Regex(@"\[flash:(.+?)\]");

您可以使用所谓的“非贪婪量词”,这意味着它在仍然匹配的情况下尽可能少地吃掉字符,而默认(贪婪)量词在仍然匹配的情况下吃掉尽可能多的字符。在量词(如
*
+
)后面加一个
,使其不贪婪:

new Regex(@"\[flash:(.+?)\]");

是的!它起作用了。只是为了测试我的理解:在正常的偏执狂论文中,它完全匹配“任何至少1个字符的文本,但不包括文字
]
”,这是正确的,只是为了看看我是否得到了正确的答案?是的!它起作用了。只是为了检验我的理解:在正常的偏执狂论文中,它完全匹配“任何至少1个字符的文本,但不包括文字
]
”这是不是正确的,只是为了看看我是否得到了正确的答案?另一个答案也很有效,那么答案之间的技术区别是什么?它们到底有什么不同之处?@can:在这种情况下,它们的工作原理是相同的,但我的解决方案略短,而且(在我看来)更容易阅读。在其他情况下,像dtb这样的解决方案将不起作用。例如,如果没有非贪婪量词(
),您可能无法匹配XML注释。XML注释不能包含
--
,因此您实际上需要类似
@dtb的内容:也许我应该说“怪癖模式HTML注释”?另一个答案也可以,那么答案之间的技术区别是什么?它们到底有什么不同之处?@can:在这种情况下,它们的工作原理是相同的,但我的解决方案略短,而且(在我看来)更容易阅读。在其他情况下,像dtb这样的解决方案将不起作用。例如,如果没有非贪婪量词(
),您可能无法匹配XML注释。XML注释不能包含
--
,因此您实际上需要类似
@dtb的内容:也许我应该说“怪癖模式HTML注释”?