【问题标题】:RegEx - Add space after word with comma [duplicate]RegEx - 用逗号在单词后添加空格[重复]
【发布时间】:2020-01-22 23:33:53
【问题描述】:

我想在一个带逗号的单词后添加一个空格。

它只是部分起作用。

$srcString = "AA,BB,CC, DD, EE";


// Variant A
$string = preg_replace('/(\D)(\,)(\D)/','$1, $3', $srcString);

// Variant B
//$string = preg_replace('/([a-zA-Z]+)(\,)([a-zA-Z]+)/','$1, $3', $srcString);


echo '<pre>';
echo 'Source: ' . $srcString;
echo '</pre>';

echo '<pre>';
echo 'Target: ' . $string;
echo '</pre>';

使用变体 A,结果如下所示:
来源:AA、BB、CC、DD、EE
目标:AA、BB、CC、DD、EE
这是 DD 和 EE 之前的 2 个空格。

使用变体 B,结果如下所示:
来源:AA、BB、CC、DD、EE
目标:AA、BB、CC、DD、EE
看起来不错,除了BB,CC没有空间。

如何解决?

【问题讨论】:

  • \D 匹配任何不是十进制数字的字符,因此它也会捕获DD 之前的空格。
  • 您可以通过单击“v”来接受最适合您的问题的答案。查看此图了解更多信息:i.stack.imgur.com/OGwTL.png

标签: php regex


【解决方案1】:

您可以通过前瞻来实现这一目标。

$string = preg_replace('/(,)(?=[^\s])/', ', ', $srcString);

(,)逗号捕获组

(?=[^\s]) Lookahead: 后面不能有空格

【讨论】:

  • 谢谢。但它应该只适用于字母而不是数字。
  • 您可以将正则表达式更改为/(,)(?=[a-zA-z])/,然后它将仅匹配逗号后跟字母
  • 谢谢。是的,它也在工作。
【解决方案2】:

使用array_maptrim 等实现您想要的非正则表达式方法,

<?php
$srcString = "AA,BB,CC,  DD, EE"; #varient 1
#$srcString = "AA,BB,CC, DD, EE"; #varient 2
#$srcString = "AA,BB,CC, DD,  EE"; #varient 3
$result = array_map('trim',explode(',',$srcString));
echo implode(', ', $result);
?>

工作演示: https://3v4l.org/e6GJf

【讨论】:

    【解决方案3】:

    只需使用逗号而不是字母,并使用单个字母而不是“一个或多个”。

    $string = preg_replace('/(\,)([a-zA-Z])/','$1 $2', $srcString);
    

    【讨论】:

    • 谢谢。但是'BB,CC'被删除了。它看起来像这样: 来源:AA,BB,CC, DD, EE, 11,22, 33 目标:AA, , , DD, EE, 11,22, 33
    • 我修好了。它现在应该可以工作了
    • 谢谢。是的,它正在工作。
    猜你喜欢
    • 2019-02-13
    • 2022-01-13
    • 2016-01-28
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多