代码之家  ›  专栏  ›  技术社区  ›  502_Geek

如果斜杠后面不包含空格,如何在斜杠后面添加空格?

  •  2
  • 502_Geek  · 技术社区  · 7 年前

    这是找到类似正则表达式格式的方法吗?

    我可能有一个字符串,也可能是一个类似于

    Human have hands/fingers/feet and so on

    如果斜杠后面没有空格,我想在斜杠后面加空格 Human have hands/ fingers/ feet and so on

    但是,如果字符串后面包含空格,我不想添加额外的空格。只想在字符串的其余部分添加空格,斜杠后面没有空格。

    例如 hands/fingers/ feet hands/ fingers/ feet

    5 回复  |  直到 7 年前
        1
  •  1
  •   Ibrahim    7 年前

    你可以用这个正则表达式:

    \/(\s)?
    

    演示: https://regex101.com/r/c67Mh9/1/

    PHP示例:

    echo preg_replace('@\/(\s)?@', '/ ', "Human have hands/fingers/ feet and so on");
    
        2
  •  1
  •   Amit Gupta    7 年前

    以下代码肯定可以工作(离线测试):

    <?php
    $string = "hands/fingers/feet";
    
    $spaceArr = explode("/",$string);
    $modify_string = '';
    foreach($spaceArr as $val){
        $modify_string .= $val."/ ";    
    }
    
    echo $modify_string;
    // Output is hands/ fingers/ feet
    
    ?>
    

    您可以在手/手指/脚中添加任意多的空间,但输出总是像手/手指/脚一样

        3
  •  1
  •   Shalitha Suranga    7 年前

    是的,当然,这次是用正则表达式

    $count = null;
    $returnValue = preg_replace('/\\/([^ ])/', '/ $1', 'hands/fingers/ feet', -1, $count);
    

    解释

    /\/([^ ])/ 这个正则表达式匹配 / 仅无空格,替换为“/$1”。这里$1是后面的字符 /

    查看更多: https://en.functions-online.com/preg_replace.html?command={"pattern":"/\/([^ ])/","replacement":"/ $1","subject":"hands/fingers/ feet","limit":-1}

        4
  •  1
  •   ArtisticPhoenix    7 年前

    是的,采用消极展望是最好的方法。

    $str = preg_replace('/\/(?!\s)/', '/ ', $str);
    

    你可以在这里看到它

    这使用了消极的前瞻。所以它基本上说:

    /

    特别感谢@ShalithaSuranga发布了与我最初想到的相同的答案,但在我有机会发布它之前,这迫使我付出了一些额外的努力来使用“展望”。

    我通常不使用它们,因为它们比常规匹配模式更容易混淆。

    也就是说,任何一种方法都可能比爆炸或其他更冗长的方法更快。然而,在这种情况下,速度可能不是一个问题,我要说的是,选择一个对你来说最有意义、对你来说更容易阅读和理解的方法。

    可读性总是#1,然后是功能,然后是性能。

    如果你想要一个简短的非regx答案,你也可以用这个

    $str = "hands/fingers/feet";
    echo implode("/ ", array_map('trim', explode("/", $str)));
    

    正如所见 here

    对于这个, array_map 将函数回调作为第一个参数(可以是字符串),并将其应用或映射到数组中的每个项。在这种情况下,我们想要 trim 删除字符串两侧的空白。然后我们将其内爆,重新组合在一起。这样的阵列就不会爆炸了 one/ two

     [
        'one',
        ' two'
     ]
    

    将删除空白,然后用 '/ ' 一切就绪。

        5
  •  0
  •   jagb    7 年前

    使用 explode() 或者试试 str_replace() 下面的示例

    请试一试 str_replace()

    <php
    $words = 'hands/fingers/ feet'; /** Your example words **/
    $words = str_replace('/', '/ ', $words); /** Replace any slash with a slash AND a space **/
    $words = str_replace('/  ', '/ ', $words); /** Replace slash with 2 spaces with slash with 1 space as this is what you need **/
    
    echo $words; /** Output: hands/ fingers/ feet **/
    ?>
    

    我希望这会把你带向正确的方向。。