PHP正则表达式:从字符串开头和结尾删除逗号和空格

4
我有一些像这样的字符串
", One "
", One , Two"
"One, Two "
" One,Two, "
" ,Two ,Three "

编辑2:一些字符串中有两个单词,例如", Two ,Three, Twenty Five, Six"。需要仅删除字符串开头和结尾的空格和逗号,我尝试使用preg_replace()和一些正则表达式,但它们会替换所有出现的字符。
编辑:实际上,最好删除所有无用字符,例如!@#$%^&*(等等,这些字符只出现在字符串的开头和结尾,而不在字符串中间。
还可以选择将字符串正确地放置为单词逗号空格另一个单词(如果单词之间有逗号)。
例如将"One,Two ,Three , Four"转换为"One, Two, Three, Four"
请分别提供两个正则表达式作为答案,因为这样更容易理解。
2个回答

4
使用正则表达式\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说他有多个字符串,而不是一个包含所有这些字符串的单个字符串,因此我创建了一个数组。 - Pruthvi Raj
不错的方法,但如果字符串中有两个单词,则无法正常工作。例如:, Two, Three, Twenty Five, Six 它会返回 , Two, Three, Twenty, Five, Six - Roman Toasov
@RomanToasov,它返回了OP要求的确切内容,如果有问题,应该是什么,正确的输出应该是什么? :) - Pruthvi Raj
正确的应该是 Two, Three, Twenty Five, Six,注意 Twenty Five 没有逗号。我没有想到需要在示例字符串中加入这个,因为我只是在问如何编辑字符串的开头和结尾部分。 - Roman Toasov
@RomanToasov,请将其添加到问题中,我会更新我的答案 :) - Pruthvi Raj

0

既然您想将输入字符串变异为一致的逗号+空格分隔字符串,那么没有理由形成临时数组——特别是如果您愿意采用正则表达式技术。

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

代码:(演示

$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"
如果您想从输入字符串的开头和结尾删除“垃圾字符”,只需将!@#$%^&*(字符添加到trim()函数的“字符掩码”参数中即可-->, !@#$%^&*(

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接