删除第一个和最后一个括号

时间:2019-02-14 16:16:34

标签: regex perl

我需要拾取第一个和最后一个括号之间的所有文本,但是使用正则表达式很困难。

到目前为止,我所拥有的是我,被困住了,不知道继续前进的热情。

/(\w+)\((.*?)\)\s/g)

但是它会停在它看到的第一个“)”处。

示例:

(me)

(mine)

((me) and (you))

所需的输出是

me

mine

(me) and (you)

3 个答案:

答案 0 :(得分:1)

由于要捕获括号内的所有文本,因此不应使用非贪婪量词。您可以使用此正则表达式,该正则表达式使用环视和贪婪版本.*,该版本捕获()之间的所有文本。

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

Demo

编辑:另一种替代解决方案

另一种提取相同数据的方法可以使用以下正则表达式来完成,该正则表达式没有任何前瞻性,某些正则表达式不支持这种正则表达式,在这种情况下可能很有用。

^\((.*)\)$

此处^\(与起始括号匹配,然后(.*)以详尽的方式使用任何文本,并置于第一个分组模式,并且仅在行尾之前最后出现的)处停止。

Demo without lookaround

答案 1 :(得分:1)

使用chop()reverse()

非正则表达式
$string='((me) and (you))';
chop($string);
$string = reverse($string);
chop($string); 
$string = reverse($string); 
print $string;

输出:

(me) and (you)

演示: http://tpcg.io/MhaLed

答案 2 :(得分:1)

您的代码几乎是正确的,仅当您不添加?时,它才有效。在正则表达式中,例如:(我还删除了几件事)

/\w+\((.*)\)/