我需要从字符串中提取包含在两个分隔符之间的一组字符,而不返回分隔符本身。
一个简单的例子应该会有所帮助:
目标:提取方括号之间的子字符串,不返回方括号本身。
基本字符串:这是一个测试字符串[或多或少]
如果我使用下面的reg。前女友。
\[.*?\]
比赛[差不多]进行得很顺利。我只需要得到更多或更少(没有括号)。
有可能做到吗?
我需要从字符串中提取包含在两个分隔符之间的一组字符,而不返回分隔符本身。
一个简单的例子应该会有所帮助:
目标:提取方括号之间的子字符串,不返回方括号本身。
基本字符串:这是一个测试字符串[或多或少]
如果我使用下面的reg。前女友。
\[.*?\]
比赛[差不多]进行得很顺利。我只需要得到更多或更少(没有括号)。
有可能做到吗?
当前回答
PHP:
$string ='This is the match [more or less]';
preg_match('#\[(.*)\]#', $string, $match);
var_dump($match[1]);
其他回答
简单的完成:
(?<=\[)(.*?)(?=\])
从技术上讲,这是使用瞭望头和后视头。参见前向和后向零宽度断言。该模式包括:
前面有a[未捕获的(向后看); 一个非贪婪的捕获组。停在第一个是不贪婪的];而且 后面跟着一个没有被捕获的[](超前)。
或者你也可以捕获方括号之间的内容:
\[(.*?)\]
并返回第一个捕获的组而不是整个匹配。
您只需要“捕获”括号之间的位。
\[(.*?)\]
为了捕获,你把它放在括号里。你没有说它使用的是哪种语言。例如,在Perl中,您可以使用$1变量来访问它。
my $string ='This is the match [more or less]';
$string =~ /\[(.*?)\]/;
print "match:$1\n";
其他语言将有不同的机制。例如,我相信c#使用Match集合类。
如果需要提取不带括号的文本,可以使用bash awk
echo[你好mundo”|啊- f”[][]{打印2美元的”
结果:
你好世界
PHP:
$string ='This is the match [more or less]';
preg_match('#\[(.*)\]#', $string, $match);
var_dump($match[1]);
我想在/和#之间找到一个字符串,但#有时是可选的。下面是我使用的正则表达式:
(?<=\/)([^#]+)(?=#*)