2017-08-03 230 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 - 只取出第一個匹配。