查找所有出现的以点开头的空格,然后随机用换行符替换这些空格

问题描述 投票:0回答:4

这是我的职责:

$words = explode('. ', $desc);
$out = '';
foreach ($words as $key => $value) {
    $out .= $value;
    $rand = rand(0, 4);
    if ($rand == 2) {
        $out .= "\n";
    } else {
        $out .= ' ';
    }
}

简而言之,它是在随机点之后插入新行,但在这种情况下,点被删除。

我怎样才能做到

explode('. ', $desc)
,并在原来的位置留下点?

php random replace
4个回答
0
投票

连接时将它们放回原处即可。

$words = explode('. ',$desc);
$out = '';
foreach ($words as $key => $value) {
    $out .= $value.'.';
    $rand = mt_rand(0, 4);
    if ($rand == 2) {
        $out .= "\n";
    } else {
        $out .= ' ';
    }
}

您还应该使用

mt_rand()
,它是
rand()
的更好版本,除非您喜欢不是真正随机的结果。


0
投票

无正则表达式主题的积极向后看。

$words = preg_split('/(?<=\.)(?!\s*$)/', $desc);

在任何非字符处进行分割,其后面带有

dot


0
投票

尝试这个代码..

$words = explode('. ',$desc);

            $out = '';
            foreach ($words as $key => $value) {

                $out .= $value;
                $rand = rand(0, 4);
                if ($rand == 2) {
                   $out .= "<br>";
                } else {
                   $out .= ' ';
                }
            }

0
投票

您不需要分解字符串并循环数组。 这一切都可以通过一次

preg_replace_callback()
调用来完成。

要随机用点后面的空格替换换行符,只需匹配一个点,忘记您将该点与

\K
匹配,然后有条件地用具有预配置随机性的换行符替换该空格。 演示

$text = 'Here. Is. A. Test. String. Apply. Random. Newlines.';

echo preg_replace_callback(
         '/\.\K /',
         fn() => rand(0, 4) === 2 ? "\n" : ' ',
         $text
     );

潜在产出:

Here. Is.
A. Test. String. Apply. Random.
Newlines.
© www.soinside.com 2019 - 2024. All rights reserved.