正则表达式匹配所有括号内容,只要在括号内容中某处存在某种模式即可

时间:2015-08-23 19:23:15

标签: regex grep

我正在尝试编写一个正则表达式(使用grep来执行它),只要在该内容中存在特定的搜索模式,它就会返回所有出现的括号内容。例如,我有以下文字

  

(McSweeney 2010)(Harpers October 2008)(McSweeney 2011)(一些作者,McSweeney,其他作者,1995)

我希望返回包含" McSweeney"的所有括号内容。在某处,所以

  

(McSweeney 2010)

     

(McSweeney 2011)

     

(某些作者,McSweeney,其他作者,1995年)

这是否可以在单个正则表达式中使用?我已经能够使用

获得所有括号内容
MessageFormat header = new MessageFormat("header massege");
MessageFormat footer = new MessageFormat("footer massage");
try {
    JTextField fieldForPrint = new JTextField("your total is $ " + jTextField1.getText());
    fieldForPrint.print(header, footer);
} catch (java.awt.print.PrinterException e) {
    System.err.format("Cannot print %s%n", e.getMessage());
}

但是当我尝试将单词引入模式时它会崩溃。

1 个答案:

答案 0 :(得分:2)

尝试使用GNU grep:

grep -oE '\([^)]*McSweeney[^)]*\)' file

输出:

(McSweeney 2010)
(McSweeney 2011)
(Some Author, McSweeney, Some Other Author, 1995)

或用字符串:

string="McSweeney"
grep -oE '\([^)]*'"$string"'[^)]*\)' file