2017-08-03 228 views
0

一审由于这里看到:http://rubular.com/r/gPpvT4ppIN我想只是第一对括号内的文本匹配,即:(X11,Linux的x86_64的),但是它仍然后来匹配另一个对括号线也是如此。我正在使用grep。正则表达式 - 仅匹配括号

正则表达式到目前为止,我曾尝试:

\(+?.+?\) 

行:

"Mozilla/4.5 (X1; Linux x86_64) AppleWebKit/534.34 (KHTML, Gecko) Qt/4.8.1 Safari/53" 

目标:

(X11; Linux x86_64) 

不是也

(KHTML, Gecko) 

我曾尝试使用一个懒惰的比赛像“ *?”但我不确定放在哪里。

+0

armnotstrong我都试过了。*?正如它在那篇文章中所说的那样,但我无法弄清楚如何正确使用它。 –

+0

Grep是错误的工具。手册页中的第一句话:“grep打印包含模式匹配的行。”因为它听起来像是在尝试在行内提取文本,所以您需要另一个工具。看看awk,perl,也许sed和其他。 – Gene

+0

遗憾的误导,他们是不一样的,已经删除了标志,非常遗憾,这语言,你用,导致这应该是一个语言特定的解决方案?像Python有一个匹配的小组获得的情况下,正则表达式搜索 – armnotstrong

回答

1

对于Python它是这样的:(。*?)

string = "Mozilla/4.5 (X1; Linux x86_64) AppleWebKit/534.34 (KHTML, Gecko) Qt/4.8.1 Safari/53" 

search = re.search(r"\((.*?)\)", string) 
text = string[search.start():search.end()] 

所以匹配之间的一切,你需要把这之间的两个支架。然而,对于支架,你需要做的 “\(” 和 “\)”

0

使用

s='Mozilla/4.5 (X1; Linux x86_64) AppleWebKit/534.34 (KHTML, Gecko) Qt/4.8.1 Safari/53' 
echo $s | grep -o '([^()]*)' | head -1 

输出:(X1; Linux x86_64)。查看online demo

详细

  • grep -o '([^()]*)' - -o选项使程序返回的所有比赛(一场比赛发生在那里没有行),以下模式中搜索:
    • ( - 文字(
    • (因为它是一个POSIX BRE图案,转义(字面轮托架相匹配)- 取反括号表达式匹配比(其他0+字符和)
    • ) - 字面)
  • head -1 - 只取出第一个匹配。