我有一个字符串数组,即文件路径。我想找到与查询匹配的所有路径。我的问题是其中包含()
的文件会导致我使用的正则表达式无法使用这些文件。
所以,如果我有以下数组:
100 => "C:\xampp\htdocs\app\public\images/uploads/15150863248706/Dual Ring (1).gif"
101 => "C:\xampp\htdocs\app\public\images/uploads/15150863248706/Dual Ring (2).gif"
102 => "C:\xampp\htdocs\app\public\images/uploads/15150863248706/Dual Ring.gif"
103 => "C:\xampp\htdocs\app\public\images/uploads/15150864989651/Infinity (1).gif"
104 => "C:\xampp\htdocs\app\public\images/uploads/15150864989651/Infinity.gif"
105 => "C:\xampp\htdocs\app\public\images/uploads/15150865699474/Infinity (1).gif"
106 => "C:\xampp\htdocs\app\public\images/uploads/15150866060006/Infinity (1).gif"
因此,如果查询为Infinity (1).gif
,则应返回103,105和106。
这就是我在PHP中使用的内容:
$query = 'Infinity (1).gif';
$files_found = preg_grep('/\b'.$query.'\b/i', $files); //Files is the array of file paths
以下是我一直在使用的regex101的链接:https://regex101.com/r/poesBK/1
答案 0 :(得分:3)
括号()
在表示捕获组的正则表达式模式中具有特殊含义,因此必须对它们进行转义。您可以转义它们或使用preg_quote(),特别是如果可能有其他特殊字符,例如来自用户输入:
$files_found = preg_grep('/\b' . preg_quote($query, '/') . '\b/i', $files);
答案 1 :(得分:0)
您不需要正则表达式来查找另一个字符串中的特定字符串。 你可以做到以下几点:
<?php
$files = [
'path/to/file/image (1).png',
'path/to/file/image.png',
'path/to/file/image (9).png',
'path/to/file/JifOrGif.gif'
];
$search = 'image (1).png';
foreach($files as $file)
{
if(strpos($file,$search) !== 0)
{
echo 'FOUND ['. $file . '] !';
}
}