【问题标题】:PHP regex strip comma and space from beginning and end of stringPHP正则表达式从字符串的开头和结尾去除逗号和空格
【发布时间】:2015-09-14 19:15:59
【问题描述】:

我有一些这样的字符串

", One "
", One , Two"
"One, Two "
" One,Two, "
" ,Two ,Three "

编辑 2: 一些字符串在逗号之间有两个单词,例如 ", Two ,Three, Twenty Five, Six"

并且需要在字符串的开头和结尾删除空格和/或逗号,只用preg_replace()尝试了很少的正则表达式,但它们替换了所有出现的地方。 p>

编辑:实际上,删除像!@#$%^&*( 之类的所有混乱会很棒,无论字符串的末尾和开头是什么,但不是介于两者之间。




可选地需要通过放置 word 然后 comma 然后 space 然后 another word (如果有逗号的话)使字符串看起来正确在单词之间)。

"One,Two ,Three , Four" 示例为"One, Two, Three, Four"

附:请以两个单独的正则表达式形式提供答案,以便于理解。

【问题讨论】:

    标签: php regex preg-match-all


    【解决方案1】:

    使用正则表达式\b\w+\b 提取单词,然后像这样重新格式化:

    <?php
    
    $strings = [", One ",
        ", One , Two",
        "One, Two ",
        " One,Two, ",
        " ,Two ,Three ",
        ", Two ,Three, Twenty Five, Six"];
    foreach($strings as &$str)
    {
        preg_match_all('/\b[\w\s]+\b/',$str,$matches);
        $neat = '';
        foreach($matches[0] as $word)
        {
            $neat .= $word.', ';
        }
        $neat = rtrim($neat,', ');
        $str = $neat;
    }
    print_r($strings);
    
    ?>
    

    输出:

    Array
    (
        [0] => One
        [1] => One, Two
        [2] => One, Two
        [3] => One, Two
        [4] => Two, Three
        [5] => Two, Three, Twenty Five, Six
    )
    

    【讨论】:

    • OP说他有多个字符串,不是一个字符串包含所有这些,所以我做了一个数组
    • 不错的方法,但是如果字符串中有两个单词,例如, Two ,Three, Twenty Five, Six 它返回,Two, Three, Twenty, Five, Six
    • @RomanToasov ,它返回了 OP 的确切要求,它有什么问题,如果是这样,应该是什么正确的输出? :)
    • 正确的是 Two, Three, Twenty Five, Six 注意 Twenty Five 没有昏迷。我认为我不需要将它放在示例字符串中,因为我只是在询问如何编辑字符串的开头和结尾部分。
    • @RomanToasov,请在问题中添加,我会更新我的答案:)
    【解决方案2】:

    由于您希望将输入字符串更改为一致的逗号+空格分隔字符串,因此没有理由形成临时数组——尤其是当您对正则表达式技术持开放态度时。

    1. 修剪输入字符串前后的所有空格和逗号,然后
    2. 用标准化的逗号+空格粘合替换一个或多个逗号或空格字符。

    代码:(Demo)

    $tests = [
        ", One ,,  ,,",
        ", Two , Three",
        "Four, Five ",
        " Six,Seven, ",
        " ,Eight ,Nine , , , , Ten ,",
    ];
    
    foreach ($tests as $test) {
        var_export(
            preg_replace('/[, ]+/', ', ', trim($test, ', '))
        );
        echo "\n";
    }
    

    输出:

    'One'
    'Two, Three'
    'Four, Five'
    'Six, Seven'
    'Eight, Nine, Ten'
    

    如果您要求在输入字符串中至少有一个逗号作为分隔序列,则此调整后的正则表达式将执行:/[, ]*,[, ]*/。演示:https://3v4l.org/HeCFp 这将在值中保留空格。

    ",,Eleventy Twelve , , Thrirteen " -> "Eleventy Twelve, Thrirteen"


    如果要删除输入字符串开头和结尾的“垃圾字符”,只需将!@#$%^&amp;*( 字符添加到trim() 的“字符掩码”参数--> , !@#$%^&amp;*(

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 2013-08-04
      • 2018-08-14
      相关资源
      最近更新 更多