如何制作一个RegEx,用于删除文件名中从最后一个下划线到.jpg扩展名的所有内容?
E.g。我有
aosta_8b08e16ae42367d29cbf11bcf27f376a.jpg
aosta_madreperla_014cb17607a4fb23fcb94a8f26efb267.jpg
并需要将其更改为此
aosta.jpg
aosta_madreperla.jpg
谢谢
答案 0 :(得分:3)
删除匹配的或用空字符串替换
_[^_]*(?=\.)
模式说明:
_ '_'
[^_]* any character except: '_' (0 or more times)
(?= look ahead to see if there is:
\. '.'
) end of look-ahead
阅读有关不使用字符串中字符的Lookahead and Lookbehind Zero-Length Assertions的更多信息,但只断言是否可以匹配。
答案 1 :(得分:0)
<强>正则表达式:强>
^(.*)_[^.]*
替换字符串:
$1
<强>解释强>
^(.*)_
从最开始的_
符号(不包括下划线)捕获所有字符并将其存储到组1中。[^.]*
匹配任何字符,但不匹配零点或多次。答案 2 :(得分:0)
您可以使用此正则表达式执行此操作
/[^_]+.jpg$/
并替换为.jpg
答案 3 :(得分:0)
答案 4 :(得分:0)
_(?!.*?_).*?(?=\.)
试试这个。通过``。查看演示。
http://regex101.com/r/hQ1rP0/18
_
匹配字符_字面
(?!.*?_)
否定前瞻 - 断言无法匹配包含_
的字符串。
(?=\.)
肯定前瞻 - 断言字符串在其前面有.
时结束。
答案 5 :(得分:0)
您不需要使用正则表达式,仅使用substr
和strpos
,它应该更快。
$str = array(
'aosta_8b08e16ae42367d29cbf11bcf27f376a.jpg',
'aosta_madreperla_014cb17607a4fb23fcb94a8f26efb267.jpg'
);
foreach ($str as $s) {
echo substr($s, 0, strrpos($s, '_')) . substr($s, -4);
echo '<br>';
}