-1

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

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

1 回答 1

0

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

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

/^[^<>=]+$/

如果您试图确保字符串的开头不会出现这种情况,那么您可以使用

/^[^<>=]/   

字符串的结尾

/[^<>=]$/

开始或结束(不用担心中间)你应该可以使用它。

/(^[^<>=]|[^<>=]$)/

如果我们使用以下代码在 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";         
        }
    }


}


?>

我们得到以下输出

/^[^<>=]+$/火柴dog

/^[^<>=]/火柴dog

/[^<>=]$/火柴dog

/(^[^<>=].*[^<>=]$)/火柴dog

/^[^<>=]+$/不匹配cat=dog

/^[^<>=]/火柴cat=dog

/[^<>=]$/火柴cat=dog

/(^[^<>=].*[^<>=]$)/火柴cat=dog

/^[^<>=]+$/不匹配<a href=

/^[^<>=]/不匹配<a href=

/[^<>=]$/不匹配<a href=

/(^[^<>=].*[^<>=]$)/不匹配<a href=

/^[^<>=]+$/不匹配bird=

/^[^<>=]/火柴bird=

/[^<>=]$/不匹配bird=

/(^[^<>=].*[^<>=]$)/不匹配bird=

于 2013-08-14T15:49:52.957 回答