动态查找 - 替换字符串的一部分

时间:2018-04-17 09:14:10

标签: php regex

我想摆脱PHP变量的第二部分,它具有固定的格式,但数字总是不同的。所以我不能使用简单的str_replace。我正在寻找一个正则表达式解决方案来解决这个问题。

  

$ string ="此部分的第一个例子10 t / m 16必须将其删除&#34 ;;

     

$ string ="第12个t / m 22的第二个例子,它必须被删除&#34 ;;

必须成为:

  

$ string ="第一个例子&#34 ;;

     

$ string ="第二个例子&#34 ;;

2 个答案:

答案 0 :(得分:0)

也许您可以使用explodeimplode并使用空格作为分隔符来获取前2个单词:

$strings = [
    "First example from this part 10 t/m 16 it has to be removed",
    "Second example from this part 12 t/m 22 it has to be removed"
];
foreach ($strings as $string) {
    $parts = explode(" ", $string);
    echo implode(" ", [$parts[0], $parts[1]]);
}

Demo

如果您想使用正则表达式,可以使用:

^[^\s]+\s[^\s]+

答案 1 :(得分:0)

您可以使用explode,implode和array_slice 这比正则表达式更快,内存更少 爆炸创建一个在空格上分隔的字符串数组 Array_slice(在本例中)获取数组的两个第一项 Implode从数组创建一个字符串(array_slice两个项目)并在其间添加一个空格。

$string = "First example from this part 10 t/m 16 it has to be removed";
echo implode(" ", array_slice(explode(" ", $string), 0,2)); // First example
echo "\n";

$string = "Second example from this part 12 t/m 22 it has to be removed";
echo implode(" ", array_slice(explode(" ", $string), 0,2)); // Second example

https://3v4l.org/efX1t

如果你坚持使用正则表达式,那就可以了。

$re = '/(.*?\s.*?\s)/';
$str = 'First example from this part 10 t/m 16 it has to be removed';

preg_match($re, $str, $match);

echo $match[1]; // First example

https://3v4l.org/0efTq

该模式会再次查找任何字符,空格,任何字符和空格。