如何合并两种正则表达式模式模型?

时间:2019-12-09 01:40:42

标签: php regex

假设我有一个字符串。

`$str = "   Hi, my  name is 
         Petr"; `

期望:$str = " Hi, my name is Petr";

我需要替换字符串开头的所有空格'....',然后如果字符串中的单词之间存在多个空格,则将其替换为一个空白。

我想使用正则表达式函数'preg_replace'。

但是我不知道如何"/^\s+/"删除字符串开头的空白,而"/\s+/"删除字符串中单词之间的空白。 是否可以将两个公式模式合并为一个模式?如果是这样,该公式将是什么样?

2 个答案:

答案 0 :(得分:1)

有两种方法可以实现此目的。您可以利用preg_replace可以采用一系列模式和替换来使用两个正则表达式这一事实:

$str = "   Hi, my  name is 
         Petr";
echo preg_replace(array('/^\s+/', '/\s+/'), array('', ' '), $str) . "\n";

或者,您可以使用稍微复杂一些的正则表达式,并使用正向后移来删除任何以字符串开头(^)或其他空格开头的空白序列:

echo preg_replace('/(?<=^|\s)\s+/', '', $str);

在两种情况下,输出均为

Hi, my name is Petr
Hi, my name is Petr

Demo on 3v4l.org

答案 1 :(得分:0)

我猜,

$str = '   Hi, my  name is
         Petr';
$result = preg_replace('/\s{2,}/', ' ', $str);
$result = preg_replace('/^\s*|\s*$/', '', $result);

echo $result;

可以正常工作,它会输出:

Hi, my name is Petr