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

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

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

基本字符串:这是一个测试字符串[或多或少]

如果我使用下面的reg。前女友。

\[.*?\]

比赛[差不多]进行得很顺利。我只需要得到更多或更少(没有括号)。

有可能做到吗?


当前回答

如果需要提取不带括号的文本,可以使用bash awk

echo[你好mundo”|啊- f”[][]{打印2美元的”

结果:

你好世界

其他回答

PHP:

$string ='This is the match [more or less]';
preg_match('#\[(.*)\]#', $string, $match);
var_dump($match[1]);

最新解决方案

如果你使用Javascript,我想出的最好的解决方案是使用match而不是exec方法。 然后,使用$1迭代匹配并删除带有第一组结果的分隔符

const text = "This is a test string [more or less], [more] and [less]";
const regex = /\[(.*?)\]/gi;
const resultMatchGroup = text.match(regex); // [ '[more or less]', '[more]', '[less]' ]
const desiredRes = resultMatchGroup.map(match => match.replace(regex, "$1"))
console.log("desiredRes", desiredRes); // [ 'more or less', 'more', 'less' ]

如您所见,这对于文本中的多个分隔符也很有用

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

\[(.*?)\]

为了捕获,你把它放在括号里。你没有说它使用的是哪种语言。例如,在Perl中,您可以使用$1变量来访问它。

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

其他语言将有不同的机制。例如,我相信c#使用Match集合类。

去掉[]的用法:

\[.+\]

我想在/和#之间找到一个字符串,但#有时是可选的。下面是我使用的正则表达式:

  (?<=\/)([^#]+)(?=#*)