【问题标题】:how to merge two models of regex patterns?如何合并两个正则表达式模式模型?
【发布时间】:2019-12-09 01:40:42
【问题描述】:

假设我有一个字符串。

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

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

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

我想用正则表达式函数'preg_replace'来做到这一点。

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

【问题讨论】:

标签: php regex


【解决方案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

【讨论】:

  • 感谢您的帮助。我会尝试你的两种方法。 @尼克
  • @PetrFořtFru-Fru 不用担心 - 但在您有机会测试之前不要接受答案。
  • 别担心。我已经尝试过这两种正则表达式。我使用了更简单的方法。到目前为止,我正在尝试理解正则表达式,我正在学习。再次感谢。 @尼克
  • @PetrFořtFru-Fru 是的,您只需要使用嵌套的regexp_replace,并转义反斜杠:dbfiddle.uk/…
  • @PetrFořtFru-Fru 不用担心 - 我很高兴能帮上忙。
【解决方案2】:

我猜,

$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    相关资源
    最近更新 更多