Answers:
容易完成:
(?<=\[)(.*?)(?=\])
从技术上讲,这是使用先行和后备。请参见零宽度断言的向前看和向后看。该模式包括:
另外,您也可以捕获方括号之间的内容:
\[(.*?)\]
并返回第一个捕获的组,而不是整个匹配项。
This is a test string [more [or] less]
这会返回more [or] less
吗?
如果您使用的是JavaScript,那么cletus提供的第一个解决方案(?<=\[)(.*?)(?=\])
将无法正常工作,因为JavaScript不支持后向运算符。
但是,第二个解决方案效果很好,但是您需要获取第二个匹配的元素。
例:
var regex = /\[(.*?)\]/;
var strToMatch = "This is a test string [more or less]";
var matched = regex.exec(strToMatch);
它将返回:
["[more or less]", "more or less"]
因此,您需要的是第二个值。采用:
var matched = regex.exec(strToMatch)[1];
回来:
"more or less"
您只需要“捕获”括号之间的位。
\[(.*?)\]
要捕获,请将其放在括号内。您不说这是使用哪种语言。例如,在Perl中,您可以使用$ 1变量来访问它。
my $string ='This is the match [more or less]';
$string =~ /\[(.*?)\]/;
print "match:$1\n";
其他语言将具有不同的机制。我相信,例如C#使用Match集合类。
[^\[]
匹配任何非[。
+
匹配1个或多个不匹配的东西[
。创建这些匹配项的组。
(?=\])
积极向前]
。匹配以结尾]
但不包含在结果中的组。
做完了
[^\[]+(?=\])
证明。
类似于null提出的解决方案。但是\]
不需要额外的。作为附加的注释,这似乎\
不需要逃脱[
后^
。为了提高可读性,我将其保留。
在分隔符相同的情况下不起作用。"more or less"
例如。
我想在/和#之间找到一个字符串,但是#有时是可选的。这是我使用的正则表达式:
(?<=\/)([^#]+)(?=#*)
这是我在C#中没有'['和']'的情况:
var text = "This is a test string [more or less]";
//Getting only string between '[' and ']'
Regex regex = new Regex(@"\[(.+?)\]");
var matchGroups = regex.Matches(text);
for (int i = 0; i < matchGroups.Count; i++)
{
Console.WriteLine(matchGroups[i].Groups[1]);
}
输出为:
more or less