PHP正则表达式替换中的可选字符

Ale*_*yer 1 php regex

我有这种格式的数据来自数据库......

BUS 101S Business and Society
Run Code Online (Sandbox Code Playgroud)

要么

BUS 101 Business and Society
Run Code Online (Sandbox Code Playgroud)

注意可选的"S"字符(可以是任何大写字符)

我需要用null替换"BUS 101S"部分,这就是我想出来的......

$value = "BUS 101S Business and Society";
$sub = substr($value, 0, 3); // Gives me "BUS"
$num = substr($value, 4, 3); // Gives me "101"
$new_value = preg_replace("/$sub $num"."[A-Z]?/", null, $value);
Run Code Online (Sandbox Code Playgroud)

$new_value现在包含的值S Business and Society.所以我很接近,只需要它来替换可选的单个大写字符.有任何想法吗?

Cal*_*Cal 8

假设模式是3个大写字母,3个数字然后是可选的大写字母,只需使用一个preg_match:

$new = preg_replace('/^[A-Z]{3} \d{3}[A-Z]?/', '', $old);
Run Code Online (Sandbox Code Playgroud)

^只会匹配一行/字符串的开头.的{3}意思是"前面的令牌3次完全匹配".的?意思是"匹配前述令牌零或一次"