Regex 为什么我的这个特殊的排除正则表达式失败了?

Regex 为什么我的这个特殊的排除正则表达式失败了?,regex,Regex,以下排除正则表达式应仅与括号中的字符匹配(抛出错误)= 但是,它也会在字符串的末尾加上空格。为什么? /^((?![<>=]).)*$/ /^((?![=]))*$/ 如果它是一个完整的字符串,则不需要四处查看。问题是环顾需要一定数量的字符才能工作(取决于实现,这意味着通常没有通配符) 如果要检查整个字符串,可以使用以下方法: /^[^<>=]+$/ /^[^=]+$/ 如果您试图确保这不会发生在字符串的开头,那么可以使用 /^[^<>=]/ /

以下排除正则表达式应仅与括号中的字符匹配(抛出错误)<>= 但是,它也会在字符串的末尾加上空格。为什么?

/^((?![<>=]).)*$/
/^((?![=]))*$/

如果它是一个完整的字符串,则不需要四处查看。问题是环顾需要一定数量的字符才能工作(取决于实现,这意味着通常没有通配符)

如果要检查整个字符串,可以使用以下方法:

/^[^<>=]+$/
/^[^=]+$/
如果您试图确保这不会发生在字符串的开头,那么可以使用

/^[^<>=]/   
/^[^=]/
结束

/[^<>=]$/
/[^=]$/
开始或结束(不必担心中间)你应该能够使用这个

/(^[^<>=]|[^<>=]$)/
/(^[^=]|[^=]$)/
如果我们使用以下代码在PHP中测试这些:

<?php

$phrases = array('dog','cat=dog','<a href=','bird=');

$patterns = array('/^[^<>=]+$/','/^[^<>=]/','/[^<>=]$/','/(^[^<>=].*[^<>=]$)/');

foreach($phrases as $phrase){

    foreach($patterns as $pattern){
        if(preg_match($pattern,$phrase)){
       echo '`'.$pattern."` matches `".$phrase."`\n";   
    } else {
       echo '`'.$pattern."` doesn't match `".$phrase."`\n";         
        }
    }


}


?>

您的正则表达式似乎与
/^([^=])*$/
非常相似(如果不相同的话)。您的正则表达式只匹配不包含任何这些字符的字符串。我想这不是您想要的,或者您使用的语言/工具不支持环顾四周。你能提供什么应该和不应该匹配的示例字符串,以及你希望每个字符串的输出是什么,以及你正在使用的语言/工具吗?实现是什么?PHP、grep、Perl、awk、python等等?我不明白你的意思。您能否提供一些预期输出/实际输出来说明您的问题?是的,这是排除性的,因此我的意思在本例中有点相反;换句话说,目的是只匹配不包含列出的字符的字符串,这确实是预期的行为。但是,如果一个字符串的末尾还有空格,那么它就不匹配没有列出的字符的字符串……这似乎毫无意义。