2014-09-13 53 views
0

爲什麼grep的-noE '<數學> * < /數學>' 匹配爲什麼正則表達式匹配這個文本?

<數學>瓦特< /數學>,從一組<數學> w的< /數學> 特殊的二進制小數,<數學> V_i,i = 1,2,\ dots, w < /數學>被稱爲方向編號。的[[格雷碼]的比特 的<數學>我< /數學>,<數學> G(I)< /數學>,使用 選擇方向編號。爲了得到Sobol序列值 <數學> S_I < /數學>採取<數學>我< /數學>與 適當的方向數的格雷碼的二進制值 的[[異或]。維度數目需要 影響<數學的選擇> V_I < /數學> 37196767:<數學> \ INT_0^1架F(u)的\,杜\約 \壓裂{1} {N} \,\ sum_ {i = 1}^N f(x_i)。 < /數學>

我只想每個元素都是自己的,而不是貪婪。

+0

downvoter care to comment? – 2014-09-13 20:11:17

+0

因爲有多個文字與開放數學標籤相匹配。 – Jhecht 2014-09-13 20:12:00

+0

如果你發佈你喜歡的輸出結果,它也會有所幫助。 – Jotne 2014-09-13 20:13:39

回答

3

您需要指定非貪婪版本:.*?,但grep正則表達式不支持它。

如果使用GNU grep,您可以使用-P選項(或--perl-regexp):

grep -noP '<math>.*?</math>' 
1

由於.*是貪婪的,它會匹配來自首次發現<math>去年發現</math>

+0

我想不要貪心,有沒有辦法用grep來做到這一點? – 2014-09-13 20:14:38

2

用途:

grep -noE '<math>[^<]*</math>' 

相反的匹配<math></math>之間的任意序列,這不會讓<在順序中,所以它不會允許</math>裏面。

它也不會允許任何其他標籤,但它看起來對您的文本沒有問題。

如果你使用的是支持PCRE的工具,你可以使用一個非貪婪正則表達式:

<math>.*?</math> 

標準grep不使用PCRE,但如果你使用GNU的grep您可以使用-P選項爲了這。

相關問題