我有此代码:
$value = 'daryaa-manmarziyan-(VideoStatus.Net).mp4';
$final_value = preg_replace("/[^a-zA-Z0-9_.]/", "", $value);
echo $final_value; exit();
输出为:daryaamanmarziyanVideoStatus.Net.mp4
我要输出daryaamanmarziyanVideoStatusNet.mp4
所有不必要的点(。)将删除我该怎么办?
答案 0 :(得分:3)
将您的preg_replace
呼叫更改为此:
$final_value = preg_replace(array("/[^a-zA-Z0-9_.]/", "/\.(?=.*\.)/"), "", $value);
第二个替换字符串(/\.(?=.*\.)/
)查找.
,后跟另一个.
,并将其替换为空字符串。
输出示例数据:
daryaamanmarziyanVideoStatusNet.mp4
答案 1 :(得分:1)
您必须使用
$value = 'daryaa-manmarziyan-(VideoStatus.Net).mp4';
$fileNames = preg_replace(array("/[^a-zA-Z0-9_.]/", "/\.(?=.*\.)/"), "", $fileName);
echo $final_value; exit();
输出将
daryaamanmarziyanVideoStatusNet.mp4
答案 2 :(得分:0)
使用交替的正则表达式:
preg_replace("/[^\w.]+|\.(?=[^.]*\.)/", "", $value);
^^^^^^^^^^^^^^
请参见PHP demo online和online regex demo。
\.(?=[^.]*\.)
模式将任何.
与\.
匹配,后跟除.
之外的任何0+字符,再跟.
。
此外,如果您不使用[A-Za-z0-9_]
修饰符,则\w
等于u
,因此,可以稍微缩短模式。
详细信息
[^\w.]+
-除单词(A-Za-z0-9_
)和.
以外的1个或更多字符|
-或\.
-点... (?=[^.]*\.)
-(正向前瞻,它紧靠当前位置的右边,确保该点是)。
[^.]*
-除.
以外的0多个字符\.
-点。