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


Replacing all proceeding underscores with 1 underscore using a regex?

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

$p__________________________________________________________________________________________________________________________________________, &$s___________________________________________________________________________________________________________________________________________, &$k____________________________________________________________________________________________________________________________________________, &$nft_____________________________________________________________________________________________________________________________________________)

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

$p_, &$s_, &$k_, &$nft_)

这基本上是删除了所有的(所以他们没有具体的数量,但他们至少有1个(程序下划线,并用1个下划线代替它们。

我尝试过以下模式,但没有成功:

preg_replace('#('$[a-z]{1,3})[_]+#', '$1', $string);

PS:之所以首选preg_replace(regex((尽管我知道它并不总是100%正确(,是因为它比使用常规字符串替换函数更精确。

感谢并感谢所有的帮助。

preg_replace('/_+/', '_', $string);

考虑到这么简单的事情,您会从strreplace((中获得更好的性能。

您可以尝试使用"str_replace'"将_替换为空格,然后在右侧修剪空格!然后在字符串末尾添加一个_。对不起,我不知道该怎么办!imo这比regex 快

您走在正确的轨道上,只是忘记了变量后面的_

如果你需要一个锚-

''$letters锚点:带$1#('$[a-z]{1,3}_)_+#

字母锚:带$1#([a-z]_)_+#

任何锚点:#((?:^|[^_])_)_+#$1