Regex 正则表达式异或

Regex 正则表达式异或,regex,Regex,我正在尝试编写一段正则表达式,其中它可以接受单词字符或数字,但不能同时接受这两个字符(异或) 现在我有: [\w\d]+ 表示由数字或字母/下划线组成的单词。但这仍然允许像5x和14342323a这样的东西通过,因为从技术上讲,它们是字母或数字。我尝试过像[\w]+|[\d]+这样的方法,但到目前为止还没有奏效。有什么帮助吗?试试这个模式:^(?[a-zA-Z]+\d+$ 您使用[\w]+\d]+已经走上了正确的轨道。问题是缺少锚定^(在字符串开头匹配)和$(在字符串末尾匹配)。它们确保在\

我正在尝试编写一段正则表达式,其中它可以接受单词字符或数字,但不能同时接受这两个字符(异或)

现在我有:

[\w\d]+

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

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


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

如果您更清楚的话,上述模式也可以写为:

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

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

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

如果要分组,请将其用作
([a-zA-Z]+[0-9]+)


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

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

/^(?:[a-z_]+|\d+)$/i
如果不想匹配下划线,只需将其删除:

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

@格戈多西:当然,我很愚蠢。谢谢你指出这一点!什么是适合您的
单词字符