Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式在特定位置没有特殊字符_Regex - Fatal编程技术网

Regex 正则表达式在特定位置没有特殊字符

Regex 正则表达式在特定位置没有特殊字符,regex,Regex,现在我有: (?!.*([._-])\1)(?=.*@)[\w.@-]+ 找到test@foo 我想使test不能以特殊字符开头或结尾 例如,我希望它能够找到: tes-t@foo test@-foo 但不是: -test@foo test-@foo -test-@foo 您可以使用^定义不包含特定字符的字符类,例如[^a]将匹配除a之外的任何字符 我会将匹配pre-@单词的正则表达式分成三部分;一个匹配主角,一个匹配中间角色,一个匹配最后一个角色。您还需要处理前一个单词只有一个字符的特

现在我有:

(?!.*([._-])\1)(?=.*@)[\w.@-]+
找到
test@foo

我想使
test
不能以特殊字符开头或结尾

例如,我希望它能够找到:

  • tes-t@foo
  • test@-foo
但不是:

  • -test@foo
  • test-@foo
  • -test-@foo

您可以使用
^
定义不包含特定字符的字符类,例如
[^a]
将匹配除
a
之外的任何字符


我会将匹配pre-@单词的正则表达式分成三部分;一个匹配主角,一个匹配中间角色,一个匹配最后一个角色。您还需要处理前一个单词只有一个字符的特殊情况。

这不是您应该重新创建控制盘的地方:有太多错误

我不知道你到底想做什么。像
president@whitehouse.gov
和一个普通的
邮政局长
可能都可以交付,但不太可能做你想做的事

验证邮件地址的唯一合理方法是将邮件发送到该地址,然后返回一个非自动回复,表明另一端是正确的人。但这无法实时完成。这意味着你能做的最好的事情就是让他们打字两次,以消除打字错误。那帮不了什么忙,真的。这就是为什么在网上注册总是需要协商握手的原因

但是,如果您只需要验证符合RFC 5322的地址,则可以使用


只需了解,测试地址是否符合RFC绝不应与验证该邮件地址混淆,这完全是另一回事。

注意,使用正则表达式匹配电子邮件地址是一个坏主意;你不能完全做到这一点,“接近”将拒绝有效的电子邮件。(我知道,我碰巧使用了一封名为
!@mydomain.net
的电子邮件,尽管遭到拒绝,但数量惊人的网站拒绝了它。)如果你坚持这样做,看看谁已经深入研究过这个话题。到目前为止,你做了哪些尝试?在我看来,你只是在说“我想要一个正则表达式来匹配这个”,而没有真正尝试修改或学习正则表达式。你所有的问题都是这样的:“我有这个正则表达式,我希望它与这个匹配,请告诉我如何更改它”,没有任何迹象表明你在学习正则表达式。请先阅读一篇教程(如),并尝试修复您的正则表达式以完成您想要的操作,然后再盲目地来到这里!我无法将“我想让测试不能以特殊字符开始或结束”与“.”匹配。但不是“test-@foo”-它不以特殊字符开始,也不以这样的字符结束…@Maxym
test-
以破折号结束,这显然是一个“特殊字符”。@Phrogz:你是什么意思,不能完全这样做。是的,RFC 5322正则表达式确实通过了你愚蠢的地址,因为它是兼容的,尽管这是不明智的。我不知道如何做到这一点,因为我是正则表达式的新手。@bjacobs:与其尝试破解一个极其复杂的正则表达式,我建议你学习如何编写简单的正则表达式,然后从那里构建所需的正则表达式。