如何在php中分解字符串?

如何在php中分解字符串?,php,explode,Php,Explode,我有一根这样的绳子- Course_13_Laravel_Batch_15_Day_22 我想得到这个输出 C-13-L-B-15-D-22 C-13-L-B-15-D-22 我该怎么做? 这是我的密码- <?php $string = "Course_13_Laravel_Batch_15_Day_22"; $dim = explode(" ", $string); $str = ""; foreach($dim as $item){ if(is_numeric( $ite

我有一根这样的绳子-

Course_13_Laravel_Batch_15_Day_22
我想得到这个输出

C-13-L-B-15-D-22
C-13-L-B-15-D-22
我该怎么做? 这是我的密码-

<?php
$string = "Course_13_Laravel_Batch_15_Day_22";
$dim = explode(" ", $string);
$str = "";
foreach($dim as $item){
    if(is_numeric( $item)){
        $str = $str."-".substr($item, 0, 2);
    }else{

        $str = $str."-".substr($item, 0, 1);
    }
}
$str = substr($str,1);
echo $str;
?>

我正在处理regexp,因为评论进来了

$string = "Course_13_Laravel_Batch_15_Day_22";
echo preg_replace(array('/([a-zA-Z]).*?_/', '/([0-9]+)_/'), '$1-', $string);
输出:


当评论进来时,我正在处理regexp

$string = "Course_13_Laravel_Batch_15_Day_22";
echo preg_replace(array('/([a-zA-Z]).*?_/', '/([0-9]+)_/'), '$1-', $string);
输出:

输出为:

C-13-L-B-15-D-22

您可以访问字符串中的单个字符 使用“方括号”

输出为:

C-13-L-B-15-D-22

您可以访问字符串中的单个字符

通过使用“方括号”

当您由于印刷错误而投票关闭时,为什么要按“”空格爆炸。按字面意思将空格
替换为
”。
一切正常:。编辑-为什么要投票?OP有清晰的输入,预期的输出,是我见过的最好的MCVE之一。由于拼写错误,请投票选择close,这个问题没有错。@mario所以请用一个有效的正则表达式提供一个建设性的答案,而不是抨击OP选择不同的解决方案。因为我想用每个单词的-和第一个字符替换u。(@Look我觉得不加说明地回答一个题为“爆炸字符串”的问题是浪费时间。更不用说在投票结束后了。还有:
preg_replace(/([a-Z]|\d+[a-Z]*./”,“$1-”,$s);
)你为什么因为印刷错误投票结束时要爆炸一个“”空格。按字面意思替换空格
带有一个
“\u
一切正常:。编辑-为什么要投票?OP有一个清晰的输入,预期的输出,是我见过的最好的MCVE之一。由于拼写错误,投票给close,这个问题没有问题。@mario所以用一个有效的正则表达式提供一个建设性的答案,而不是抨击OP选择不同的解决方案。因为我想把u替换成每个单词的-和第一个字符。(@Look,我觉得不加说明地回答一个题为“爆炸字符串”的问题是浪费时间的。更不用说在投票结束后了。还有:
preg_u替换(/([a-Z]|\d+[a-Z]*.\u/,“$1-”,$s);
)你能解释一下为什么投否决票吗?伙计们,这是一个打字错误,我们通常会发表评论,就像上面已经说过的那样,然后关闭这些问题。它们对其他人几乎没有任何用处!(不是我的DV)关于你的代码更改的解释实在太少了。(对于新手来说,使用
explode
处理每隔一个字符串任务也是一个糟糕的建议。)谢谢你会对我的代码做更多的解释来改进我的答案。你能解释一下为什么会投否决票吗?这是一个打字错误,我们通常会发表评论,就像上面已经说过的那样,然后关闭这些问题。它们几乎对其他人没有任何用处!(不是我的DV)关于你的代码更改的解释实在太少了。(对于新手来说,使用
explode
处理每隔一个字符串任务也是一个糟糕的建议。)谢谢你会对我的代码做更多的解释来改进我的答案。这是一个打字错误,我们通常会发表评论,就像上面已经说过的那样,然后关闭这些问题。它们对其他人几乎没有任何用处!@RiggsFolly同意,但我认为这个答案提出了一个比他以前使用的explode/foreach方法更好的解决OPs问题的方法更简单、更聪明、更容易理解:preg_replace(数组(“/[a-z]/”、“/_/”)、数组(“,”-”)、$string);@vasilenicusor可能,但对OPs数据的格式做出了可能不真实的假设。例如,如果它是
course\u 15\u hello
(即所有小写字母)或
课程8\u 5\u混合
(混合字母数字)?我试着尽可能的笼统。这是一个打字错误,我们通常会做出评论,就像上面已经说过的那样,然后关闭这些问题。它们几乎对其他人没有任何用处!@RiggsFolly同意,但我认为这个答案提出了一个比他使用的爆炸/foreach方法更好的解决OPs问题的方法,因此它是潜在的对其他人有用。更简单、更聪明、更容易理解:preg_replace(数组(“/[a-z]/”,“/”),数组(“,”-”),$string);@vasilenicus或可能,但对OPs数据的格式做出可能不真实的假设。例如,如果它是
course_15_hello
(即所有小写字母)或
course8_5_混合
(混合字母数字)?我已经尽力做到尽可能的笼统。