为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式以查找两个字符之间包含的字符串,同时排除分隔符。

/ 猿问

正则表达式以查找两个字符之间包含的字符串,同时排除分隔符。

喵喔喔 2019-06-18 15:00:27

正则表达式以查找两个字符之间包含的字符串,同时排除分隔符。

我需要从字符串中提取包含在两个分隔符之间的一组字符,而不返回分隔符本身。

一个简单的例子应该是有帮助的:

目标:提取方括号之间的子字符串,而不返回方括号本身。

基串This is a test string [more or less]

如果我使用以下方法。前。

\[.*?\]

比赛是[more or less]..我只需要more or less(没有括号)。

有可能这样做吗?


查看完整描述

3 回答

?
冉冉说

容易做到:

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

从技术上讲,这是在使用外观和后视镜。看见向前看和向后看零宽度断言..该模式包括:

  • 前面是[未捕获(查找)“;
  • 一个非贪婪的被俘团体。在第一站停下来是不贪婪的;
  • 后面跟着未捕获的](查找)。

或者,您只需捕捉方括号之间的内容:

\[(.*?)\]

并返回第一个捕获组,而不是整个匹配。


查看完整回答
反对 回复 2019-06-18
?
POPMUISE

如果你用JavaScript第一解由Cletus提供,(?<=\[)(.*?)(?=\]),因为JavaScript不支持Lookback操作符,所以无法工作。

但是,第二个解决方案工作得很好,但是您需要获得第二个匹配的元素。

例子:

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"


查看完整回答
反对 回复 2019-06-18
?
慕森卡

您只需“捕获”括号之间的位。

\[(.*?)\]

要捕获它,请将其放在括号内。你不能说这使用的是哪种语言。例如,在Perl中,您可以使用$1变量访问这个变量。

my $string ='This is the match [more or less]';$string =~ /\[(.*?)\]/;print "match:$1\n";

其他语言将有不同的机制。例如,C#使用匹配集合同学们,我相信。


查看完整回答
反对 回复 2019-06-18

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信