除空间外的最小字符数

时间:2014-07-17 10:43:21

标签: java regex

我有这样的正则表达式(这要归功于你们这些人):

(?<=( |\\s|\\A|^))@(!)[\\w]{3,}+ ?[\\w]*

哪个很好但是我现在需要再匹配一个案例,我无法弄清楚如何做到这一点。我需要在@之后至少有3个字符,但我还需要至少3个字符,至少两个字符在一个空格之前,然后一个空格是可选的。所以我需要匹配这些模式:

@tst
@tst test
@ts t

如果没有空格或至少有两个字符,一个空格,然后至少还有一个字符,我怎么能强制执行至少三个字符?我可以把它作为两个单独的表达式,但我希望它可以用一个表达式吗?

任何人都可以指出我正确的方向..

感谢。

编辑: 好吧,我想我已经实现了我想要的目标:

(?<=( |\\s|\\A|^))@{1}(([\\w]{3,}+ ?[\\w]*)|([\\w]{2,} {1}[\\w]{1,}))

是否有更有效的方式或者应该如何做?

3 个答案:

答案 0 :(得分:1)

我认为你可以稍微简化你的表达:

String regex = "(?<=(\\s|\\A|^))@(\\w{2,} ?\\w+)";

我做了什么:

  • 从第一部分删除了多余空间。
  • 简化了最后一个表达式。根据你的描述,它现在接受至少2个字符,后跟一个可选的空格,后跟至少一个字符。

我不确定(!)部分的重点是什么,因此在此版本中删除它以匹配您的测试用例。

答案 1 :(得分:1)

以下内容应符合您的需求:

(?<=(?<!\w)@)\w{2,} ?\w+

Regular expression visualization

Debuggex Demo

不要忘记在Java字符串中逃避Java中的反斜杠:

(?<=(?<!\\w)@)\\w{2,} ?\\w+

答案 2 :(得分:0)

我能想到的最简单的正则表达式是:

(?<=\s|^)@(\s*\w){3,}