「置換での削除」ではなく「以降を含まない文字列を生成」と捉え方を変えてみると
PHP
1<?php
23 * - で区切れらた文字列の指定場所以降を削る
4567
8function conv(string $word = "",int $pos = 2):string
9{
10 $w = explode("-",$word);
11 $a = [];
12 for($i=0;$i<$pos;$i++){
13 if(!isset($w[$i])) break;
14 $a[] = $w[$i];
15 }
16 return implode("-",$a);
17}
18
19echo conv().PHP_EOL;
20echo conv("aaa").PHP_EOL;
21echo conv("aaa-bbb").PHP_EOL;
22echo conv("aaa-bbb-w").PHP_EOL;
23echo conv("aaa-bbb-w-y-").PHP_EOL;
24echo conv("aaa-bbb-w-x-y-",3).PHP_EOL;
25echo conv("aaa-bbb-w-xxx-zzz-ddd-aaa----aaaeee",5).PHP_EOL;
26echo conv("aaa-bbb-w-xxx-zzz-ddd-aaa----aaaeee",6).PHP_EOL;
27echo conv("aaa-bbb-w-xxx-zzz-ddd-aaa----aaaeee",10).PHP_EOL;
個人的にはどうしても正規表現ではないとできないものを除いては、
機能一発に拘らずアウトプットを如何に分かりやすい記述で出すかという点を重視したく考えます。
仕様として「-と-の間が空だったらどうするか(末尾が - の場合は?)」というところも気にはなりますが、
正規表現だと仕様変更や追加のときに考慮すべきことが増えてメンテナンス性も落ちるように感じて、
私個人としては積極採用はしてない部類です。