使用正则表达式用1个下划线替换所有正在进行的下划线?

new*_*php 0 php regex pcre

我需要一些帮助,我有一个如下所示的字符串:

$p__________________________________________________________________________________________________________________________________________, &$s___________________________________________________________________________________________________________________________________________, &$k____________________________________________________________________________________________________________________________________________, &$nft_____________________________________________________________________________________________________________________________________________)
Run Code Online (Sandbox Code Playgroud)

并想知道我是否可以使用正则表达式将其转换为:

$p_, &$s_, &$k_, &$nft_)
Run Code Online (Sandbox Code Playgroud)

这基本上是删除所有(因此他们没有具体数量,但他们至少1)进行下划线,并用1下划线替换它们.

我尝试过以下模式,但没有运气:

preg_replace('#(\$[a-z]{1,3})[_]+#', '$1', $string);
Run Code Online (Sandbox Code Playgroud)

PS:preg_replace(正则表达式)优先的原因(虽然我理解它不是100%总是正确的)因为它比使用常规字符串替换函数更精确.

谢谢,感谢所有的帮助.

Mar*_*c B 5

preg_replace('/_+/', '_', $string);
Run Code Online (Sandbox Code Playgroud)

想到这么简单的东西,你可以从str_replace()获得更好的性能.