我无法理解preg_replace函数中正则表达式中的逻辑。具体来说,我无法理解括号内使用插入符号。如果我输入与用户名栏中任何字母/数字匹配的单个字母/数字,我将获得该行的匹配。当我删除插入符时,即使我没有搜索任何内容,我的数据库中的所有内容都匹配。有人可以详细说明这里发生了什么吗?感谢。
$searchq = $_POST['search'];
$searchq = preg_replace("/[^0-9a-z]/i","",$searchq );
$query = mysqli_query($conn, "SELECT * FROM people ".
"WHERE username LIKE '%$searchq%'") or die('Could not search.');
答案 0 :(得分:3)
[^0-9a-z]
是一个字符类([]
)。字符类中的^
是否定,又名"不是",所以字面意思是"匹配任何不是数字或字母字符的东西。
答案 1 :(得分:2)
在基本上每个正则表达式的风格中,方括号[]
表示字符类,它将匹配其中任何字符的一个实例。以插入符号^
开头的字符类否定 - 即它将匹配其中不的任何字符的单个实例。
在这种情况下,您的角色类将匹配任何不是数字或小写字母的字符。因为你的正则表达式处于忽略大小写模式(i
修饰符),它将匹配任何不是数字或ASCII字母(大写或小写)的字符,preg_replace
将删除通过用空字符串(""
)替换它。