首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查和替换字符串PHP中的双表达式

检查和替换字符串PHP中的双表达式
EN

Stack Overflow用户
提问于 2018-10-24 02:06:22
回答 4查看 68关注 0票数 1

这是我的字符串,例如:

代码语言:javascript
复制
$x = " i love you/i love her/you love me/you love me "

我想放在每个空白处-所以我使用:

代码语言:javascript
复制
$y = preg_replace(" ","-",$x);

我得到了:

代码语言:javascript
复制
  $y = " i-love-you/i-love-her/you-love-me/you-love-me "

在这个字符串中,我有两个表达式你爱我,如果我有这个,我想加上其他而不是一个-,我想加上2 --

所以我的最后一个字符串将如下所示:

代码语言:javascript
复制
$y = " i-love-you/i-love-her/you-love-me/you--love--me "

你能帮我处理这些吗,因为如果我使用preg替换,它会影响整个字符串?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-24 02:49:41

试试这段简单的代码

代码语言:javascript
复制
$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);
票数 1
EN

Stack Overflow用户

发布于 2018-10-24 02:41:03

另一个更冗长且可能更慢的方法:{

代码语言:javascript
复制
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); 

}
票数 0
EN

Stack Overflow用户

发布于 2018-10-24 02:48:31

从原始字符串开始,您可以匹配斜杠分隔的短语,并在跟踪短语的回调函数中进行空格替换。如果其中一个短语已经出现,请将空格替换为双破折号而不是单划线。

代码语言:javascript
复制
$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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52955266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档