有条件的正则表达式替换" - "或" _"在带有点

时间:2017-02-02 17:57:01

标签: php regex

的示例:

this-is_a-random-filenam-jpg
this-is_a-random-filenam-png
this-is_a-random-filenam-gif
this-is_a-random-filenam-pdf

需要的结果:

this-is_a-random-filenam.jpg
this-is_a-random-filenam.png
this-is_a-random-filenam.gif
this-is_a-random-filenam.pdf

我想出了

\-(?=[^-]*$)

它只标记最后一次出现,不检查条件后面是否存在实际有效的文件扩展名(jpeg,jpg,pdf,gif在我的情况下)并且不能与&#一起使用34; _"

2 个答案:

答案 0 :(得分:1)

表达式

要通过处理文件扩展名来执行此更改,您可以使用此正则表达式:

(-|_)(?=(?:jpe?g|png|gif|pdf)$)

并用.替换匹配。

  

您必须在此模式中列出所需的所有文件扩展名。

See the regex demo

PHP示例

$re = '/(-|_)(?=(?:jpe?g|png|gif|pdf)$)/';
$str = 'this-is_a-random-filenam-jpg
this-is_a-random-filenam-png
this-is_a-random-filenam-gif
this-is_a-random-filenam-pdf';
$subst = '.';

$result = preg_replace($re, $subst, $str);

答案 1 :(得分:0)

在正则表达式的末尾使用以下标志

/(-|_)(?=jpg|png|gif|pdf)/gm