如何使正则表达式匹配此字符串


How to make regular expression to match this string?

我想对以下字符串进行正则表达式:

2004年阿斯顿……martin db9 31 m3.img

我希望模式匹配所有的空格和点,除了最后一个点(用于扩展)我执行了以下模式

/'s{1,}|'.{1,}/

这个模式匹配所有的点和空格,包括最后一个点。如何从字符串

中排除最后一个点?

这里也是代码(PHP)

$file = "2004 aston....martin db9 31 m3.img";
echo preg_replace("/'s{1,}|'.{1,}/", "_", $file);

,输出为

2004_aston_martin_db9_31_m3_img

你的正则表达式等于/'s+|'.+/

如果你可以使用查找头,那么你可以这样做:

/('s+|'.+)(?=.*'.)/

使用正则表达式:

'.(?=.*'.)|'s

以上答案将导致正则表达式引擎回溯。

你应该避免*

(?=.*'.) should be converted to (?=[^.]*'.)