获取字符前后的特定字符串

Get a specific String After and Before a character

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

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

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

$string2 = 'sh'

现在我想得到准确的

$finalstr = 'shampoo'

通过替换“-”中的上一个和下一个字符串。

有办法吗?但是我做不到。

$string 是否总是用“-”切入 "parts"?您是否在寻找匹配特定前缀的词?

如果是,你可以用$string组成一个数组:

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

然后迭代 $array 以将您的前缀与存储在 $array 中的每个单词进行比较(您可能需要 REGEX)

如果您要查找以 sh 开头且被 - 包围或位于字符串开头或结尾的内容,可以使用以下一种方法:

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

另一种选择是结合使用 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;