正则表达式之间的任何东西[]

时间:2010-09-09 13:58:14

标签: asp.net regex

我需要找到[]

的正则表达式

例如,如果字符串是 - Hi [Stack],这是我需要[查找]的[标签]。

它应该回归 堆栈,标签,查找

5 个答案:

答案 0 :(得分:27)

非常简单,您只需要(1)使用反斜杠转义括号,(2)使用(.*?)来捕获内容。

\[(.*?)\]

括号是一个捕获组,它们捕获其内容供以后使用。 .*之后的问号使得匹配非贪婪。这意味着它将匹配可能的最短匹配,而不是最长的匹配。当你在一行中有多个匹配时,会出现贪婪和非贪婪之间的区别:

Hi [Stack], Here is my [Tag] which i need to [Find].
   ^______________________________________________^

贪婪的匹配将在两组方括号之间找到最长的字符串。那是不对的。非贪婪的比赛会找到最短的:

Hi [Stack], Here is my [Tag] which i need to [Find].
   ^_____^

无论如何,代码最终会looking like

string regex = @"\[(.*?)\]";
string text  = "Hi [Stack], Here is my [Tag] which i need to [Find].";

foreach (Match match in Regex.Matches(text, regex))
{
    Console.WriteLine("Found {0}", match.Groups[1].Value);
}

答案 1 :(得分:3)

\[([\w]+?)\]

应该有效。如果您还需要包含特殊字符,则可能需要更改匹配组。

答案 2 :(得分:3)

取决于您所说的环境:

\[([^\]]+)]

答案 3 :(得分:0)

.NET语法,负责多个嵌入式括号:

\[ ( (?: \\. | (?<OPEN> \[) | (?<-OPEN> \]) | [^\]] )*? (?(OPEN)(?!)) ) \]

这会计算[中已打开的OPEN部分的数量,并且只有在OPEN最后为0时才会成功。

答案 4 :(得分:0)

我遇到了类似的问题,发现这也可以解决问题。

\[\w{1,}\]

\ w 表示 元字符 。这将匹配1个或多个单词字符。

使用 n {X,} 量词匹配可以获取不同金额的任何字符串。在故意遗漏第二个数字的情况下,该表达式表示要匹配的1个或多个字符。