我有一个变量如下:
$str1 = 'some random book cover .jpg';
$str2 = 'some random cd cover .jpg';
我想删除文件扩展名中句点之前的前导空格,以便上面的示例如下所示:
$str1 = 'some random book cover.jpg';
$str2 = 'some random cd cover.jpg';
那里可能有任何数量的空格。我可以(并且在用regexp挣扎之后)在perl中编写一个kludgy小子例程来执行此操作,但这似乎是定制的正则表达式。不幸的是,我的regexp-fu能力不足。
有人能告诉我我的方式错误并缓解我心烦意乱吗?
答案 0 :(得分:5)
$subject =~
s/\s+ # Match one or more spaces
(?= # if they are followed by
\. # a dot
[^.]* # and any number of characters except dots
$ # up to the end of the string.
)
//xg;
应该这样做,假设您正在寻找任何类型的文件扩展名,而不仅仅是jpg
。
(?=...)
是一个所谓的lookahead assertion,它确定所包含的内容可以在当前位置匹配,但不会在匹配结果中包含它。
答案 1 :(得分:0)
贪婪的匹配解决方案:
s/^(.*\S)\s+\./$1./