2014-09-13 102 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选项为了这。

相关问题