正则表达式替换一个字符的所有出现?

时间:2015-05-13 19:27:36

标签: php regex

关于此的很多主题但是我无法弄清楚,寻找一些提示,不应该那么困难。

我有文件名:

test_file_from_mpc.mp4_snapshot_13.29_[2015.05.13_21.10.11].jpg

我试图使用正则表达式替换字符_然后从快照开始的所有内容

我得到快照,但我似乎无法了解如何捕捉_的所有出现

(_)(snapshot)(.*)

仅选择1 _

我看了。应该选择"任何单个字符"不确定如何正确使用它或者它是我正在寻找的。

任何指导都会很棒! (这可能是100%的欺骗,但我检查了所有建议的线程,但没有找到解决这个看似简单的问题!)

3 个答案:

答案 0 :(得分:2)

尚未发表评论,但要使正则表达式匹配多个匹配项,您需要g - global修饰符。

/(_snapshot.*$|_|\.)/gi

https://regex101.com/r/aI7fF8/2

如果您完全用空格替换所有匹配的出现,请记住修剪最后一个空格。

这里还有一个php样本

<?php
$str = "test_file_from_mpc.mp4_snapshot_13.29_[2015.05.13_21.10.11].jpg";
$res = preg_replace(array("/_snapshot.*$/", "/[_.]/"), array("", " "), $str);
print $res; // test file from mpc mp4

答案 1 :(得分:0)

snapshot.*$|[_.]

你可以试试这个。space。见。演示。

https://regex101.com/r/mT0iE7/13

$re = "/snapshot.*$|[_.]/im"; 
$str = "test_file_from_mpc.mp4_snapshot_13.29_[2015.05.13_21.10.11].jpg"; 
$subst = " "; 

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

答案 2 :(得分:0)

另一种(可能更快但不漂亮)的方式是使用explode()&amp;内爆()。

{% if article.motto %}<p>{{ article.motto | replace("_", "<i>", 1) | replace("_", "</i>" }}</p>{% endif %}
相关问题