正则表达式在字符串内的任何位置恰好匹配一个字符

时间:2018-01-21 10:51:09

标签: regex

我想匹配字符串中的符号@。如果它位于字符串的开头,中间或末尾或其内部的任何位置都没有关系。重要的是只匹配它0或1次。

我想到了这样的事情:

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

但绝对不行,因为即使它与符号@匹配一次,它也只能在字符串内匹配。

@foobar Valid
foo@bar Valid
foobar@ Valid
fooba@r Valid

但是

@@foobar Invalid
@foo@bar Invalid
foo@b@ar Invalid

1 个答案:

答案 0 :(得分:3)

您可以使用以下正则表达式:

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

禁止在输入字符串中包含多个@

<强>测试:

https://regex101.com/r/H4hXF5/1

如果您还需要匹配不包含@的字符串,请在正则表达式后面添加?

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

这也将匹配字符串abc,例如

<强>解释

  • ^行首
  • [^@]*然后除@之外的所有字符都采用0到N次
  • @然后一个@字符
  • [^@]*与step2相同
  • $行的结尾
  • ?让角色变为可选角色