以下排除性正则表达式应仅匹配(抛出错误)括号中的字符 < > = 但是,它也会在字符串末尾抛出一个空格。为什么?
/^((?![<>=]).)*$/
如果它是一个完整的字符串,则不需要环顾四周。问题是环顾需要一定数量的字符才能工作(取决于实现意味着通常没有通配符)。
如果要检查整个字符串,可以使用以下命令:
/^[^<>=]+$/
如果您试图确保字符串的开头不会出现这种情况,那么您可以使用
/^[^<>=]/
字符串的结尾
/[^<>=]$/
开始或结束(不用担心中间)你应该可以使用它。
/(^[^<>=]|[^<>=]$)/
如果我们使用以下代码在 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=