这是我的字符串,例如:
$x = " i love you/i love her/you love me/you love me "
我想放在每个空白处-所以我使用:
$y = preg_replace(" ","-",$x);
我得到了:
$y = " i-love-you/i-love-her/you-love-me/you-love-me "
在这个字符串中,我有两个表达式你爱我,如果我有这个,我想加上其他而不是一个-,我想加上2 --
所以我的最后一个字符串将如下所示:
$y = " i-love-you/i-love-her/you-love-me/you--love--me "
你能帮我处理这些吗,因为如果我使用preg替换,它会影响整个字符串?
发布于 2018-10-24 02:49:41
试试这段简单的代码
$x = "i love you/i love her/you love me/you love me";
$strArr = explode("/",$x);
$temp = array();
foreach($strArr as $value){
if(in_array($value,$temp)){
$result[]=str_replace(" ","--",$value);
}else{
$result[]=str_replace(" ","-",$value);
}
$temp[] = $value;
}
echo implode("/",$result);
发布于 2018-10-24 02:41:03
另一个更冗长且可能更慢的方法:{
function format_string($x)
{
//trim whitespace to avoid "-" at beginning and end
$x = str_replace(" ","-",trim($x));
// create an array of each entry
$entries = explode("/", $x);
//count each entry
$entry_counts = array_count_values($entries);
foreach($entry_counts as $string => $count){
if($count == 2){
$needs_updating = $string;
}
}
if(isset($needs_updating)){
foreach($entries as $index => &$entry){
if($entry == $needs_updating){
$entries[$index] = str_replace("-", "--",$entry);
}
}
return implode("/", $entries);
}
return implode("/", $entries);
}
发布于 2018-10-24 02:48:31
从原始字符串开始,您可以匹配斜杠分隔的短语,并在跟踪短语的回调函数中进行空格替换。如果其中一个短语已经出现,请将空格替换为双破折号而不是单划线。
$pattern = '/(?<=^|\/).+?(?=\/|$)/';
$phrases = [];
$y = preg_replace_callback($pattern, function($phrase) use (&$phrases) {
$separator = in_array($phrase[0], $phrases) ? '--' : '-';
$phrases[] = $phrase[0];
return str_replace(' ', $separator, $phrase[0]);
}, trim($x));
https://stackoverflow.com/questions/52955266
复制相似问题