*意思是“重复 0 次或多次”,所以你让每一个匹配都是可选的。您的正则表达式甚至会匹配字符串[SPACE][SPACE]等A[SPACE][SPACE]A。
正则表达式/([A-Z]+) ([0-9]+) ([A-Z]+)0?([0-9]+)/会更好。
这是一个演示和尸检:
([A-Z]+)-匹配 AZ 之间的字母的捕获组重复 1 次或多次(这就是+意思)
[SPACE]-文字空格字符
([0-9]+)-匹配 0 到 9 之间的数字的捕获组重复 1 次或更多次
[SPACE]-文字空格字符
([A-Z]+)-与第一个相同。与 AZ 匹配的捕获组重复 1 次或多次。
0?-重复 0 或 1 次的文字0字符(因此它是可选的)。
([0-9]+)-匹配 0 到 9 之间的数字的捕获组重复 1 次或更多次
PHP 演示。
PHP代码:
<?php
$input = "ABC 318 XY2388";
$output = preg_replace("/([A-Z]+) ([0-9]+) ([A-Z]+)0?([0-9]+)/", "$1 $2/$3 $4", $input);
var_dump($output); //string(15) "ABC 318/XY 2388"
$input = "ABC 318 XY02388";
$output = preg_replace("/([A-Z]+) ([0-9]+) ([A-Z]+)0?([0-9]+)/", "$1 $2/$3 $4", $input);
var_dump($output); //Same as above, as 0 is optional: string(15) "ABC 318/XY 2388"
?>