Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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_Regex Negation - Fatal编程技术网

在执行regex表达式过程中遇到的问题

在执行regex表达式过程中遇到的问题,regex,regex-negation,Regex,Regex Negation,场景: ^([a-z0-9]*([.])*([a-z0-9]))+(?!@)(?!gmail.com)+$ 我尝试的正则表达式不应允许包含“@”字符的表达式。我已经成功地实现了它。但是,两个字符之间必须包含“.”点符号 面临的问题: ^([a-z0-9]*([.])*([a-z0-9]))+(?!@)(?!gmail.com)+$ 此正则表达式允许不带“.”点符号的字符 下面是正则表达式: ^([a-z0-9]*([.])*([a-z0-9]))+(?!@)(?!gmail.com)+

场景:

 ^([a-z0-9]*([.])*([a-z0-9]))+(?!@)(?!gmail.com)+$
我尝试的正则表达式不应允许包含“@”字符的表达式。我已经成功地实现了它。但是,两个字符之间必须包含“.”点符号

面临的问题:

 ^([a-z0-9]*([.])*([a-z0-9]))+(?!@)(?!gmail.com)+$
此正则表达式允许不带“.”点符号的字符

下面是正则表达式:

 ^([a-z0-9]*([.])*([a-z0-9]))+(?!@)(?!gmail.com)+$
所需结果:

 ^([a-z0-9]*([.])*([a-z0-9]))+(?!@)(?!gmail.com)+$
1。上述正则表达式应允许以下表达式:

 ^([a-z0-9]*([.])*([a-z0-9]))+(?!@)(?!gmail.com)+$
a。约翰,市长

b。迈克尔·克拉克

c。吉滕德拉123.gurung

等等

2。但它不应允许以下表达式:

 ^([a-z0-9]*([.])*([a-z0-9]))+(?!@)(?!gmail.com)+$
a。约翰

b。吉坦德拉@

c。john@gmail.com

等等

我在上面尝试过的正则表达式中需要进行哪些更正才能达到预期的结果?


非常感谢您的建议。

您可以使用您指定的字符类
[a-z0-9]+
,并使用
+
进行一次或多次匹配,以确保dot前后至少有一个
[a-z0-9]


我找到了@onyanbu和@Theforthbird建议的两个最相关的答案,我在下面发布了这两个答案:

  • ^\w+[.]\w+$
    如@Onyambu所建议

  • ^(?。.*@[a-z0-9]+\.[a-z0-9]+$
    如@Theforthbird建议的那样


  • 两者都符合我的要求。让我知道哪一个更好。

    ^\w+[.]\w+$
    呢?我已经试过了,但没有效果。这捕获了什么不应该的?你知道
    (?!@)(?!gmail.com)+$
    是没有意义的,可以用
    $
    来代替吗?@DixonCh不,这是没有意义的,当那些看起来像头的人检查那些不可能在那个地方的东西时,你需要下一个字符串的结尾<代码>^([a-z0-9]*([.])*([a-z0-9])+$的作用与您的表达式完全相同。通过将
    *
    转化为
    +
    你甚至可以解决你的问题(尽管Onyanbus的建议更简洁),我更新了我的答案,没有
    (?!.@)
    ,因为那不应该存在,因为
    [a-z0-9]
    @
    不匹配
    \w
    匹配大小写字符以及下划线,因此它只是您允许匹配的内容的一部分。如果是这样,那么我认为您的建议更符合我的要求。但是我需要的表达式不应该包含“@”符号,所以也应该有(?!*@)。这部分即(?!.*@)是否检查“@”符号在整个表达式中的出现情况,并且不让它出现?这是不需要的,因为
    [a-z0-9]
    @
    不匹配,因此如果字符串中有
    @
    ,则正则表达式将不匹配。明白了。谢谢你的建议。