剥离前导和结尾逗号

时间:2017-10-09 20:25:27

标签: php regex

您好久以来一直在使用以下代码

$string = "/,One, Two, Three, Four,,, Five, ,  Six,  , , Seven,./";
$regex = "/^[,\s]+|[\s,]+$/";
echo preg_replace($regex, ',', $string);

但它不再有效,因为用户无缘无故地输入逗号

所以我尝试使用这个正则表达式$regex = "/[\s,]+/"

效果非常好,但不是预期的。

我想要实现的是根本没有前导或结尾的特殊字符,只有字母数字字符。每个分离只有一个逗号,所以我的最终目标就像是

来自/,One, Two, Three, Four,,, Five, , Six, , , Seven,./

One, Two, Three, Four, Five, Six, Seven

如何做到这一点?

3 个答案:

答案 0 :(得分:1)

我认为使用preg_split带有标记PREG_SPLIT_NO_EMPTYimplode是一种好方法:

$parts = preg_split('~[^[:alnum:],]*,[^[:alnum:]]*~', $str, -1, PREG_SPLIT_NO_EMPTY);
$result = implode(', ', $parts);

答案 1 :(得分:1)

使用trim()删除开头和结尾的符号,然后使用此正则表达式将错误的逗号用法转换为正确的用法。

您可以使用以下正则表达式执行此操作:

echo preg_replace("/((\W{1,}),(\W{1,}))/", ', ', trim($string, ',./'));

Regex101可以引导您了解正则表达式的工作原理。

答案 2 :(得分:0)

您可以使用org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be 'a method call on a mock'. For example: when(mock.getArticles()).thenReturn(articles); Also, this error might show up because: 1. you stub either of: final/private/equals()/hashCode() methods. Those methods *cannot* be stubbed/verified. 去除字符串开头和结尾处的句点,逗号和斜杠。然后你可以使用trim()来清理中间逗号和空白的混合:

preg_replace()

修改如果$string = "/,One, Two, Three, Four,,, Five, , Thirty One, , Six, , , Seven,./"; $regex = "/\s*,[,\s]+/"; echo preg_replace($regex, ', ', trim($string, ',./')); // "One, Two, Three, Four, Five, Thirty One, Six, Seven" 不够,您需要剪切所有非字母数字字符,您也可以使用表达式。这不是很好,但它有效:

trim()