正则表达式,没有加倍的字符和字符串长度

时间:2013-01-31 19:51:08

标签: regex

每当我需要使用正则表达式时,我意识到我已经忘记了关于它们的一切。

我正在尝试匹配所有只包含小写字母数字字符并且没​​有加倍的字母数字字符并且长度也在{10,12}个字符以内的字词。

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

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

干杯!

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

这是一个,虽然我不确定会有更好的方法......

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

答案 2 :(得分:1)

这是我的尝试:

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

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

在撰写本文时,另一个答案有误报,与eoeuaoarounn部分相匹配