Regex 如何表达;至少有一个组件“;

Regex 如何表达;至少有一个组件“;,regex,Regex,我正在尝试使用正则表达式检查字符串数据。 输入数据的形式如下所示 #1X2Y3Z@4A5B6C(有效) @必须至少用一个或多个组件{A、B、C}表示,并且空字符串也是有效的 +将上一个标记重复一次或多次,因此[ABC]+匹配一个或多个A、B或C。^称为起始锚定,而$称为线端锚定 更新: ^(?:#(?:@?[0-9]+[ABCXYZ])+)?$ 使用这个: ^(#(?:[0-9][A-Z])*@?(?:[0-9]|[A-Z])+)?$ 我按照您的要求按照说明对其进行了测试: @必须至少用一个

我正在尝试使用正则表达式检查字符串数据。 输入数据的形式如下所示

#1X2Y3Z@4A5B6C(有效)
@必须至少用一个或多个组件{A、B、C}表示,并且空字符串也是有效的

+
将上一个标记重复一次或多次,因此
[ABC]+
匹配一个或多个A、B或C。
^
称为起始锚定,而
$
称为线端锚定

更新:

^(?:#(?:@?[0-9]+[ABCXYZ])+)?$
使用这个:

^(#(?:[0-9][A-Z])*@?(?:[0-9]|[A-Z])+)?$
我按照您的要求按照说明对其进行了测试:

@必须至少用一个组件[([0-9]+)A([0-9]+)B、([0-9]+)C]表示

如果输入不是空字符串,则#必须存在于字符串前面


你的意思是说这个
^@[ABC]+$
?你想准确地检查什么?您使用的是什么语言?谢谢您的帮助,我想检查@是否用至少一个组件{A,B,C}或更多表示。所以“A”、“AC”、“@”无效,“@A”、“AC”有效,空字符串也有效。我用的是std:regext这是正确的:
^(#)(?:[0-9][A-Z])*@(?:[0-9][A-Z])+?)?$
@joejo:我编辑了你的问题,使它更容易阅读。请检查并确保我理解正确。谢谢你的回复。这是完全正确的,但是如果我把A,B,C改成([0-9]A),([0-9]B),([0-9]C),它就不起作用了。在这种情况下,如何解决它?数字来自哪里?添加锚定([0-9]A)$
,这样它将允许空字符串或类似于
5A
的数字A。我修改了我的问题。谢谢。据我所知,
@
是可选的,但是如果它在那里,后面必须跟一些字符。你的正则表达式没有这么说。谢谢julianG,它是有效的,但正如我所想,它只在搜索时有用,而不是匹配时。例如,让输入字符串“#9A5B@5“,您的正则表达式可以搜索#9A5B,但无法显示输入是否有效。请尝试以下方法:
^(#(?:[0-9][A-Z])*@(?:[0-9]|[A-Z])+)?$
^(#(?:[0-9][A-Z])*@?(?:[0-9]|[A-Z])+)?$