以下排他性正则表达式应仅匹配(抛出错误)括号中的字符< > = 但是,它也会在字符串末尾抛出一个空格。为什么呢?
/^((?![<>=]).)*$/
答案 0 :(得分: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=