php str_replace and \b word boundary

前端 未结 2 1473
遥遥无期
遥遥无期 2021-01-22 05:00

I am trying to use str_replace, but can\'t figure out how to use \\b for word boundary:



        
相关标签:
2条回答
  • 2021-01-22 05:18

    You cannot use \b with str_replace(). The word boundary "\b" is only a valid anchor in regular expressions. So use preg_replace(), it's more appropriate should your search text contain natural language:

     $replace = array_combine($search, $replace);
     preg_replace('#\b('.implode('|',$search).')\b#e', '$replace["$1"]?:"$1"', $str)
    

    Otherwise any occourence of "E" in the text will get replaced with "East". As alternative you could at least add a space right hand to your $search and $replace strings.

    0 讨论(0)
  • 2021-01-22 05:23

    Don't bother with the regexes, just order your replacement strings in an order that replaces the longer ones first:

    $search = array("North Northeast", "East Northeast", "East Southeast", "South Southeast", "South Southwest", "West Southwest", "West Northwest", "North Northwest", "Northeast", "SouthEast", "Southwest", "Northwest", "North", "East", "South", "West");
    
    $replace = array("NNE", "ENE", "ESE", "SSE", "SSW", "WSW", "WNW", "NNW", "NE", "SE", "SW", "NW", "N", "E", "S", "W");
    
    echo str_replace($search, $replace, "East Northeast winds 20 knots");
    
    // Output: ENE winds 20 knots
    

    This way you don't have to worry about East being replaced before East Southeast.

    0 讨论(0)
提交回复
热议问题