如何使用preg_replace在输出字符串中保留连字符

时间:2017-02-13 11:21:26

标签: php regex preg-replace

我有以下要求。

输入 ----------: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在输出字符串中保留连字符?

3 个答案:

答案 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}之外,

[^ something]会找到一个匹配项 \ w - >字母 [^ \ w.-]会找到除alpha,period和hyphen之外的任何内容,并用下划线替换它。

$input = 'z-edu-l1-^threat -emergency mk pl.jpg';

echo strtolower(preg_replace('([^\w.-])', '_', trim($input)));

查看直播demo here