Regex preg_replace不返回任何内容的问题

Regex preg_replace不返回任何内容的问题,regex,Regex,我正在对一个文件名进行一些检查,但即使我在regex101.com上测试正则表达式时它能工作,但一旦我将它放在真实环境中,它总是不会返回任何结果 我有一个文件名“abc123.jpg”存储在$_文件[“picture”][“name”] 如果我这样做: str_replace('a','',$_FILES["picture"]["name"]) 我得到“bc123.jpg” 如果我这样做: 我得到“”(没有) 这怎么可能? 我错过了什么 最终,我的正则表达式是: /[^\w\.\-]/g 要

我正在对一个文件名进行一些检查,但即使我在regex101.com上测试正则表达式时它能工作,但一旦我将它放在真实环境中,它总是不会返回任何结果

我有一个文件名“abc123.jpg”存储在$_文件[“picture”][“name”]

如果我这样做:

str_replace('a','',$_FILES["picture"]["name"])
我得到“bc123.jpg” 如果我这样做:

我得到“”(没有)

这怎么可能? 我错过了什么

最终,我的正则表达式是:

/[^\w\.\-]/g
要删除除下划线、破折号和点之外的所有非字母数字字符(文件类型扩展名之前需要)

您忘记使用。我建议你用

$s = preg_replace('~[^\w.-]+~', '', $s);
                   ^        ^
看。这里,我使用
~
作为正则表达式分隔符

请注意,字符类末尾的
-
被视为连字符,不必转义
在字符类中始终被视为文字点,也不需要对其进行转义。由于您希望删除这些符号,因此最好在连续的块中删除它们,因此,我建议在字符类之后添加一个
+
量词,以匹配一个或多个出现


请注意,PHP正则表达式不支持
/g
修饰符,
preg\u replace
默认情况下替换所有不重叠的引用。

preg\u replace(“~a~”,“,”,$”文件[“picture”][“name”])
-您忘记了分隔符。谢谢!是的,我忘记了示例中的分隔符,但是我在测试的实际正则表达式中确实有分隔符,但是我不知道PHP不支持/g修饰符,我认为这就是它不起作用的原因。感谢您澄清这一点并提供一个工作示例!
$s = preg_replace('~[^\w.-]+~', '', $s);
                   ^        ^