PHP 中的 preg_replace() - 当跟随新行时,将一个字符的 n 次出现替换为另一个字符的 n 次出现

发布于 2024-10-03 11:09:20 字数 540 浏览 4 评论 0原文

我正在寻找替换新行后面出现的所有空格字符(或出现在输入字符串开头的空格字符)。我知道我可以使用 preg_replace_callback() 以及使用 str_repeat 和 strlen 的回调来实现此目的,或者类似地使用 /e 开关;但想知道是否可以做得更简单。

目前我有以下内容:

$testData = "  Hello\n to everybody\n   in the world";
echo preg_replace('/^|\n( )+/', ' ', $pValue);

给出:

"   Hello to everybody in the world" 

我真正追求的是:

"  Hello\n to everybody\n   in the world" 

I'm looking to replace all occurrences of space characters that follow a new line (or occur at the beginning of the input string). I know that I can achieve this using preg_replace_callback() with a callback that uses str_repeat and strlen, or similarly with the /e switch; but was wondering if it could be done more simply.

Currently I have the following:

$testData = "  Hello\n to everybody\n   in the world";
echo preg_replace('/^|\n( )+/', ' ', $pValue);

which gives:

"   Hello to everybody in the world" 

What I'm really after is:

"  Hello\n to everybody\n   in the world" 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

给妤﹃绝世温柔 2024-10-10 11:09:20

在提问之前我应该​​更努力地搜索:找到了似乎完美工作的答案(针对 java 解决方案)。为了其他有同样问题的人,我将把解决方案留在这里。

$testData = "  Hello\n to everybody\n   in the world"; 
echo preg_replace('/(?m)(?:^|\\G) /', ' ', $pValue); 

现在只需要确定旧版本的 PHP 是否支持这一点。

I should have searched harder before asking: found the answer (for a java solution) that seems to work perfectly. I'll leave the solution here for the sake of anybody else that has the same problem.

$testData = "  Hello\n to everybody\n   in the world"; 
echo preg_replace('/(?m)(?:^|\\G) /', ' ', $pValue); 

Now just need to identify whether older versions of PHP support this.

£烟消云散 2024-10-10 11:09:20

您可以使用递归

$pValue = "  Hello\n to everybody\n   in the world";
echo myReplace($pValue);

function myReplace($value)
{
    $value = preg_replace('/(^|\\n)(( )*) /', '\1\2 ', $value);
    if (preg_match('/(^|\\n)(( )*) /', $value))
    {
        $value = myReplace($value);
    }
    return $value;
}

You can use recursion

$pValue = "  Hello\n to everybody\n   in the world";
echo myReplace($pValue);

function myReplace($value)
{
    $value = preg_replace('/(^|\\n)(( )*) /', '\1\2 ', $value);
    if (preg_match('/(^|\\n)(( )*) /', $value))
    {
        $value = myReplace($value);
    }
    return $value;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文