You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式匹配字符串中@符号恰好0次或1次?

搞定@出现0次或1次的正则匹配需求

你要的是整个字符串里@只能有0个或者1个,不管它在开头、中间还是结尾对吧?你之前试的^[^@]*@[^@]*$其实能匹配所有@出现1次的情况(包括开头、结尾的场景哦,你之前可能测试错啦),但它的问题是必须要有一个@,没法匹配完全没@的字符串。

那咱们改一下,把@的部分改成可选的就好啦,最终的正则是:

^[^@]*@?[^@]*$

给你拆解下这个正则的逻辑:

  • ^ 锚定字符串开头
  • [^@]* 匹配任意个(包括0个)不是@的字符
  • @? 这是关键:匹配0个或者1个@,完美满足你的0次或1次要求
  • [^@]* 再匹配任意个(包括0个)不是@的字符
  • $ 锚定字符串结尾

对应你的测试场景验证下:

能匹配的有效情况:

  • @foobar → 开头是@,后面全是非@字符,没问题
  • foo@bar → 中间一个@,前后都没问题
  • foobar@ → 结尾是@,前面全是非@字符,匹配成功
  • fooba@r → 中间插了个@,符合要求
  • 甚至完全没@的foobar也能匹配,满足0次的需求

会被排除的无效情况:

  • @@foobar → 两个@,直接不匹配
  • @foo@bar → 两个@,被排除
  • foo@b@ar → 两个@,不符合规则

要是你还想禁止空字符串(比如不允许输入啥都没有的情况),可以用这个版本:

^[^@]+@?[^@]*$|^[^@]*@?[^@]+$

这个会要求字符串至少有一个非@的字符,同时@最多出现一次。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:37:05