2013-03-04 57 views
0

我有一些長字符串,我試圖捕捉一個子字符串,直到某個字符被滿足。 讓我們假設我有下面的字符串,並且我想在第一個&符號之前得到文本。Regular exp從匹配字符串開始,直到某個字符被滿足

abc.8965.aghtj&hgjkiyu5.8jfhsdj 

我想提取什麼符號所以之前存在:abc.8965.aghtj W¯¯認爲這會工作:

grep'^.*&{1}' 

我將它翻譯爲

^ start of string 
.* match whatever chars 
&{1} until the first ampersand is matched 

有什麼建議嗎? 恐怕這需要我數週

回答

2

{1}不匹配的第一次出現;相反,它意味着「僅匹配前面的模式/字符之一」,這與匹配字符(&{3}匹配&&&)完全相同。

爲了匹配的&第一發生,你需要使用.*?

grep'^.*?&' 

通常情況下,.*是貪婪的,這意味着它儘可能匹配。這意味着你的模式將與最後的和號相匹配,而不是第一個。 .*?是非貪婪版本,在滿足模式的同時儘可能少地匹配。

更新:該語法可能不被grep支持。這裏是另一種選擇:

'^[^&]*&' 

它匹配任何不是&符號,直到第一個符號。

您還可能需要在grep中啓用擴展正則表達式(-E)。

+0

的grep是不幸的是沒有工作,我明白你的意思,雖然'^ *&? – JBoy 2013-03-04 13:47:20

+0

@JBoy,我對答案做了更新。 – 2013-03-04 13:54:05

0

試試這個:

^.*?(?=&) 

它不會得到符號標誌,只是一個文本之前

+0

嗨塞爾吉奧,thx,但不幸的是這不是fetchin任何東西 – JBoy 2013-03-04 13:49:11

+0

看起來像你做的錯誤,我和dan1111都工作得很好,不同的是,我的跳過&簽署 – Sergio 2013-03-04 13:50:37

+0

test =「abc.8965.aghtj&hgjkiyu5.8jfhsdj」echo $ {test} | grep'^。*?(?=&)' – JBoy 2013-03-04 13:51:49

相關問題