Noob在这里:我无法理解这个正则表达式搜索背后的逻辑

时间:2016-09-13 21:56:32

标签: php mysql regex

我无法理解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.');

2 个答案:

答案 0 :(得分:3)

[^0-9a-z]是一个字符类([])。字符类中的^是否定,又名"不是",所以字面意思是"匹配任何不是数字或字母字符的东西。

答案 1 :(得分:2)

在基本上每个正则表达式的风格中,方括号[]表示字符类,它将匹配其中任何字符的一个实例。以插入符号^开头的字符类否定 - 即它将匹配其中的任何字符的单个实例。

在这种情况下,您的角色类将匹配任何不是数字或小写字母的字符。因为你的正则表达式处于忽略大小写模式(i修饰符),它将匹配任何不是数字或ASCII字母(大写或小写)的字符,preg_replace将删除通过用空字符串("")替换它。