或多或少显而易见:
\[start\](.*?)\[end\]
但是也会产生[start]和[end]标签。你怎么省略它们?
例如:f("[somestartstring]result[someendstring]") == "result"
更新:建议的答案无效。我的代码是:
printfn "%s" (Regex.Match(@"[start]result[end]",
"\\[start\\](.*?)\\[end\\]").Groups.[0].Value)
但它仍会产生周围的开始和结束标记。
我的错误是:0指数!谢谢。
答案 0 :(得分:5)
您需要使用一个组,这是一个匹配的字符串:
\[start\](.*?)\[end\]
当你来阅读时,它们从1开始编号(零是整个匹配的字符串)。 (如果您发现更直观的话,还有指定组的工具。)
E.g。在C#中:
Match match = new Regex("\[start\](.*?)\[end\]").Match("[start]blah[end]");
string value = match.Groups[1].Value;
答案 1 :(得分:3)
记住Groups[0]
匹配整个输入。如果您只想要第一个捕获的组,那么它是Groups[1]
,所以
string text = "[start]blahblah[end]";
Console.WriteLine(Regex.Match(text, @"\[start\](.*?)\[end\]").Groups[1].Value);
打印blahblah
。
答案 2 :(得分:1)
使用\[start\](.*?)\[end\]
C#
Regex regex = new Regex("\\[start\\](.*?)\\[end\\]");
VB
Dim regex As Regex = New Regex("\[start\](.*?)\[end\]")
答案 3 :(得分:0)
取决于语言。通常您必须指定要返回的匹配组;通常,组为零是整个匹配表达式,1是第一个匹配组,2是第二个匹配组,依此类推。
更新1 :请参阅http://www.regular-expressions.info/dotnet.html
Update 2 :作者似乎认为他理解.NET语法。因此,删除代码示例并让答案独立。