我有以下要求。
输入 ----------:z-edu-l1-^threat -emergency mk pl.jpg
必填 ----:z-edu-l1-_threat_-emergency_mk_pl.jpg
我使用以下
$input = 'z-edu-l1-^threat -emergency mk pl.jpg';
echo strtolower(preg_replace('/\W(?![^.-]*$)/', '_', trim($input)));
我得到以下输出
z_edu_l1__threat__emergency_mk_pl.jpg
我不想用下划线替换 - 符号。如何使用preg_replace在输出字符串中保留连字符?
答案 0 :(得分:3)
您可以将\W
替换为其等效的否定字符类[^\w]
,并取消您需要保留的符号:
[^\w.-]
请参阅regex demo
[^\w.-]
匹配任何不是字母/数字的字符,_
,.
和-
。
请参阅PHP demo:
$input = 'z-edu-l1-^threat -emergency mk pl.jpg';
echo strtolower(preg_replace('/[^\w.-]/', '_', trim($input)));
// => z-edu-l1-_threat_-emergency_mk_pl.jpg
答案 1 :(得分:1)
$input = "z-edu-l1-^threat -emergency mk pl.jpg";
$output = str_replace(["^", " "], "_", $input);
echo $output;
//output
//z-edu-l1-_threat_-emergency_mk_pl.jpg
答案 2 :(得分:1)
[^ something]会找到一个匹配项 \ w - >字母 [^ \ w.-]会找到除alpha,period和hyphen之外的任何内容,并用下划线替换它。
$input = 'z-edu-l1-^threat -emergency mk pl.jpg';
echo strtolower(preg_replace('([^\w.-])', '_', trim($input)));
查看直播demo here