有人可以帮助我获取[%=和%]之间的内容。
答案 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)
试试这个:
\[%=((?:[^%]|%[^\]])*)%]