获取角色之前和之后的特定字符串

时间:2015-05-12 14:59:15

标签: php string replace

例如,如果我有一个字符串

$string = 'haircut-with-shampoo-and-style-from-vibe-styling-salon';

我有另一个字符串或字符,如

$string2 = 'sh'

现在我想要完全

$finalstr = 'shampoo'

替换' - '。

中的上一个和下一个字符串

有没有这样做?但我无法这样做。

3 个答案:

答案 0 :(得分:2)

$string是否会被切入"部分"用" - " ?您在寻找与特定前缀匹配的单词吗?

如果是,您可以使用$string撰写数组:

$array = explode("-", $string);

然后迭代$ array来比较你的前缀和存储在$ array中的每个单词(你可能需要REGEX)

答案 1 :(得分:1)

另一种方法是将strstrsubstrstrpos结合使用:

$string = 'haircut-with-shampoo-and-style-from-vibe-styling-salon';
$string2 = 'sh';

$finalstr = substr(($str = strstr($string . '-', $string2)), 0, strpos($str, '-'));
echo $finalstr;

Sample Output

旁注:添加的-仅适用于sa => salon实例。

这基本上做的是它只是从主弦(段)获得该针的第一次出现,然后从该分段的弦中,它只是将其子串到第一个-破折号中,从而获得所需的字符串

但是如果你需要在子字符串中匹配多个字符串或匹配,最简单的方法就是爆炸并测试每个字符串:

$string = 'haircut-with-shampoo-and-style-from-vibe-styling-salon-sharon';
$string2 = 'sh';
$finalstr = ''; // $finalstr = array();
foreach(explode('-', $string) as $s) {
    if(stripos($s, $string2) !== false) {
        $finalstr .= ' ' . $s;
        // $finalstr[] = $s;
    }
}

echo $finalstr;
// echo implode(' ', $finalstr); // array option

或数组表单版本:

$string = 'haircut-with-shampoo-and-style-from-vibe-styling-salon-sharon';
$string2 = 'sh';
$finalstr = implode(' ', array_filter(explode('-', $string), function($s) use($string2){
    return stripos($s, $string2) !== false;
}));

echo $finalstr;

答案 2 :(得分:0)

如果你正在寻找以sh开头的-或者字符串的开头或结尾处的内容,这是一种方法:

preg_match("/(\b|-)(sh[^\b-]+)(\b|-)/", $string , $match);
$finalstr = $match[2];