正则表达式:获取[%=和%]之间的内容

时间:2010-01-27 17:10:33

标签: .net regex

有人可以帮助我获取[%=和%]之间的内容。

6 个答案:

答案 0 :(得分:2)

你可以使用简单的

\[%=(.*?)%\]

但你应该意识到它不能正确处理嵌套。如果内容可能跨越多行,您还需要指定RegexOption.Singleline以使.*?跨行边界。

答案 1 :(得分:2)

如果没有嵌套标签,您可以使用以下正则表达式:

\[%=(.*?)%]

符号表示以下内容:

\[    Match a literal [ character. The backslash is required otherwise [ would
      start a character class.
%=    Match %=
(.*?) Match any characters, non-greedy. i.e. as few as possible. The parentheses
      capture the match so that you can refer to it later.
%]    Match %] - Note that it is not necessary to escape ] here, but you can if
      you want.

以下是如何在C#中使用它:

string s = "sanfdsg[%=jdgashg%]jagsklasg";
Match match = Regex.Match(s, @"\[%=(.*?)%]");
if (match.Success)
{
    Console.WriteLine(match.Groups[1].Value);
}

输出:

jdgashg

或者获得多场比赛:

string s = "foo[%=bar%]baz[%=qux%]quux";
foreach (Match match in Regex.Matches(s, @"\[%=(.*?)%]"))
{
    Console.WriteLine(match.Groups[1].Value);
}

输出:

bar
qux

请注意,字符串文字写为@“...”。这意味着字符串中的反斜杠被视为文字反斜杠,而不是转义代码。在C#中编写正则表达式时,这通常很有用,以避免必须加倍字符串中的所有反斜杠。这里没有太大的区别,但在更复杂的例子中它会有所帮助。

答案 2 :(得分:1)

或许

%=\s?(.*?)\s?%

答案 3 :(得分:0)

(?<=\[%=).*?(?=%])

将匹配这两个分隔符之间的任何文本(包括换行符)(不与分隔符本身匹配)。不支持嵌套分隔符。

迭代所有比赛:

Regex my_re = new Regex(@"(?<=\[%=).*?(?=%\])", RegexOptions.Singleline);
Match matchResults = my_re.Match(subjectString);
while (matchResults.Success) {
    // matched text: matchResults.Value
    // match start: matchResults.Index
    // match length: matchResults.Length
    matchResults = matchResults.NextMatch();
} 

答案 4 :(得分:0)

\[%=([^%]|%[^\]])*%\]

这不依赖于任何贪婪运算符,因此应该转换为任何正则表达式语言。您可能会或可能不会关心这一点。

答案 5 :(得分:0)

试试这个:

\[%=((?:[^%]|%[^\]])*)%]