2013-01-31 33 views
2

每次我需要使用正则表达式时,我意识到我已经忘记了关于它们的一切。正则表达式没有双字符和字符串长度的字

我试图匹配只有小写字母数字字符的所有单词,并且没有加倍的字母数字字符并且长度也在{10,12}个字符之内。

现在,要弄清楚一个字符是否跟着相同的字符,我会做(.)\1。要查看一个单词是否在10个和12个字符之内,我确实需要{10,12}。要只抓住小写字母和数字,我做[0-9a-z]

但我如何将它们连接在一起?

干杯! PS:这将运行在相当大的NLP xml(100mb +)上,所以如果正则表达式不是最慢的选择,我将不胜感激。

回答

3

我认为这会做你想要什么: -

/\b(?:([a-z0-9])(?!\1)){10,12}\b/ 

说明: -

\b // Word boundary 
(?: 
    ([a-z0-9]) // Match lowercase letters or digit 
    (?!\1)  // Not followed by the same digit as before 
){10,12}  // 10 to 12 times. 
\b // Word boundary 
+0

这将匹配blahblahblaa blahblahbl。 –

+0

+1 - 在打我的时候没有看到您的答案,但您确实先到达那里。只需要添加我已经忘记的字边界。 –

+0

@ Jeff-Meadows。啊!只是一个字界的问题。 –

2

这里有一个,虽然我不能肯定不会有更好的办法...

/\b(?:([a-z0-9])(?!\1)){10,12}\b/ 
1

这是我的尝试:

(\b(?![0-9a-z]*([0-9a-z])\2)[0-9a-z]{10,12}\b) 

(我们必须使用前视,某种边界通常对于正常运行非常重要。因此\b)。

在写这篇文章的时候,另一个答案有假阳性,匹配部分eoeuaoarounn

相关问题