所以我现在正在使用preg_grep来查找包含字符串的行,但是如果一行包含特殊字符,例如“ - 。@”,我只需键入该行内的1个字母,它就会输出为匹配项。行的例子
example@users.com
搜索请求
ex
并输出
example@users.com
但如果搜索请求与“example@users.com”匹配,则只应输出“example@users.com”此问题仅发生在使用特殊字符的行上,例如
如果我在包含
的行上搜索“example”example123
它会回应
not found
但如果我搜索确切的字符串“example123”
它当然会按照它的假设输出
example123
所以问题似乎在于包含特殊字符的行。
我目前使用的grep是,
if(trim($query) == ''){
$file = (preg_grep("/(^\$query*$)/", $file));
}else{
$file = (preg_grep("/\b$query\b/i", $file));
答案 0 :(得分:0)
$in = [
'example@users.com',
'example',
'example123',
'ex',
'ex123',
];
$q = 'ex';
$out = preg_grep("/^$q(?:.*[-.@]|$)/", $in);
print_r($out);
<强>解释强>
^ : begining of line
$q : the query value
(?: : start non capture group
.* : 0 or more any character
[-.@] : a "special character", you could add all you want
| : OR
$ : end of line
) : end group
<强>输出:强>
Array
(
[0] => example@users.com
[3] => ex
)
编辑,根据评论:
您必须使用preg_replace
:
$in = [
'example@users.com',
'example',
'example123',
'ex',
'ex123',
];
$q = 'ex';
$out = preg_replace("/^($q).*$/", "$1", preg_grep("/^$q(?:.*[.@-]|$)/", $in));
print_r($out);
<强> Ooutput:强>
Array
(
[0] => ex
[3] => ex
)