正则表达式独占或

时间:2014-04-06 23:30:51

标签: regex

我正在尝试编写正则表达式的一部分,它接受单词字符或数字,但不能同时接受(独占或)。

现在我有:

[\w\d]+

表示由数字或字母/下划线组成的单词。但是仍然可以让像5x和143243243243242323a这样的东西通过,因为从技术上讲它们是字母或数字。我尝试了[\w]+|[\d]+之类的东西,但到目前为止它还没有对我有用。有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

此正则表达式与您描述的单词匹配:

/^(?:[a-z_]+|\d+)$/i

如果您不想匹配下划线,只需删除它:

/^(?:[a-z]+|\d+)$/i

答案 1 :(得分:0)

试试这种模式: ^(?:[a-zA-Z]+|\d+)$


您已与[\w]+|[\d]+走在正确的轨道上。问题是锚点^(在字符串的开头匹配)和$(在字符串末尾匹配)缺失。他们确保在\w+\d+之前或之后没有任何内容,从而确保单词 由单词字符或数字组成,但不是两者的混合(或任何其他人物)。此外,正如Gergo指出的那样,\w也匹配数字。

如果您更清楚,上述模式也可以写成如下:

^[a-zA-Z]+$|^\d+$

答案 2 :(得分:0)

您可以使用[a-zA-Z_]+|[0-9]+

添加边界,例如字符串的开头和结束^[a-zA-Z_]+$|^[0-9]+$

如果您想分组,请将其用作([a-zA-Z_]+|[0-9]+)

对于非捕获组使用(?:[a-zA-Z_]+|[0-9]+)