帮助正则表达式

时间:2010-12-02 21:09:23

标签: java regex

我正在构建一个正则表达式,它将接受至少1个字母数字字符和任意数量的空格。

现在我已经...... [A-Za-z0-9]+[ \t\r\n]*我知道至少有1个字母数字或至少1个空格。我该如何解决这个问题?

编辑:要回答下面的评论,我希望它接受包含ATLEAST 1字母数字和任意数量(包括否)空格的字符串。现在它将接受一个空格。

EDIT2:澄清一下,我不希望接受任意数量的空格(包括0),除非至少有1个字母数字字符

4 个答案:

答案 0 :(得分:2)

\s*\p{Alnum}[\p{Alnum}\s]*

你的正则表达式[A-Za-z0-9]+[ \t\r\n]*要求字符串以字母或数字开头(或者更确切地说,它在看到之前不会开始匹配)。添加\s*允许匹配以空格开头,但在跟随字母数字的第一个空白字符后,您仍然无法匹配任何字母数字(例如,它与{不匹配}在xyz中{1}}。将结尾abc xyz更改为\s*可以解决问题。

另外,[\p{Alnum}\s]*与Java中的\p{Alnum}完全相同,而在所有正则表达式中并非如此。我使用[A-Za-z0-9],不仅因为它更短,而且因为它提供了更多的保护,如\p{Alnum}这样的拼写错误(这在句法上是有效的,但几乎肯定不是作者真正的意思)。

编辑:也应该考虑性能。我最初在[A-z]之后添加了+,但我意识到这不是一个好主意。如果这是较长的正则表达式的一部分,并且正则表达式立即不匹配,则最终可能会浪费大量时间尝试将相同的字符组与\p{Alnum}\p{Alnum}+匹配。但是,领先[\p{Alnum}\s]*是可以的,因为\s*\s匹配的任何字符都不匹配。

答案 1 :(得分:1)

任何一个或多个单词char为零或更多空格

\w+\s*

答案 2 :(得分:0)

嘿试试这个([^\s]+\s*) [^ \ s]意味着抓住所有不是空白的空间,而\ s *意味着空白是可选的(如果你真的想要至少一个空格+而不是) 编辑:sory mine catch不仅使用字母数字(put([a-zA-Z0-9] + \ s )用于字母数字)

答案 3 :(得分:0)

这应该可以解决问题:

\s*\p{Alnum}+\s*
  • \p{Alnum}是一个字母数字字符:[\p{Alpha}\p{Digit}]
  • *说“零次或多次”
  • +说“至少有一个”(不是“或”,因为您似乎相信,或写成|
  • |表示“或”
  • \s是一个空格字符:[ \t\n\x0B\f\r]
  

编辑:要回答下面的评论,我希望它接受包含至少1个字母数字和任意数量(包括没有)空格的字符串。

我建议的模式至少需要一个字母数字字符。

  

EDIT2:澄清一下,我不希望接受任意数量的空格(包括0),除非至少有1个字母数字字符

我建议的模式不会只接受空白字符。