php 从第二个出现的连字符开始删除字符串中的所有字符

velaa5lx  于 2023-06-04  发布在  PHP
关注(0)|答案(7)|浏览(338)

如何在字符-第二次出现后剥离字符串中的所有内容?
例如:Today is - Friday and tomorrow is - Saturday
我希望删除Saturday沿着最后一个连字符:- Saturday
我似乎只能在第一个-之后删除所有内容。
预期结果是:Today is - Friday and tomorrow is

laawzig2

laawzig21#

使用strpos查找第一个匹配项,然后再次使用它查找结束点(使用偏移选项和上一个值)。然后使用substr

$newstr = substr($str, 0, strpos($str, '-', strpos($str, '-')+1));
mcvgt66p

mcvgt66p2#

关于爆炸:

$parts = explode( '-', "Today is - Friday and tomorrow is - Saturday" );
echo $parts[0].'-'.$parts[1];
9bfwbjaz

9bfwbjaz3#

strtok

$newStr = strtok($str, '-') . '-' . strtok('-');

DEMO

ql3eal8s

ql3eal8s4#

对于其他有同样问题的人;我使用了这种紧凑的解决方案,很容易调整。

$str = 'Today is - Friday and tomorrow is - Saturday';

$sliceWith = "-"; // character to split by
$beginWith = 0; // 1 removes before first match, 0 will not
$splitAfter = 2; // number of matches to keep

$result = implode($sliceWith, array_slice(explode($sliceWith, $str), $beginWith, $splitAfter));

echo $result; // You might want to use trim($result)
7rtdyuoh

7rtdyuoh5#

可以使用explode()在每次出现“-"时拆分字符串。例如:

$str = "Today is - Friday and tomorrow is - Saturday"
$parts = explode(" - ", $str);

会给你留下:

$parts = ["Today is", "Friday and tomorrow is", "Saturday"]

因此,您想要的位将是中间带有“-”的前两个元素,因此我们可以从数组中弹出最后一个元素并连接其余元素:

array_pop($parts);
$result = implode(" - ", $parts);

其给出:

$result == "Today is - Friday and tomorrow is";
rqenqsqc

rqenqsqc6#

我发现正则表达式模式的控制和简洁性对这项任务最有吸引力。
匹配零个或多个非连字符,然后匹配一个连字符(N次; 2),在最后一个连字符匹配之前用\K重置整个字符串匹配,然后匹配剩余的字符。
如果字符串中的连字符少于N个,则此方法不会删除任何字符。
代码:(Demo

$string = "Today is - Friday and tomorrow is - Saturday";
var_export(
    preg_replace('/(?:[^-]*\K-){2}.*/', '', $string)
);

如果你想在第二个连字符后删除尾随空格,你可以将其添加到模式中,而不是在返回的字符串上调用rtrim()。(Demo

var_export(
    preg_replace('/(?:[^-]*?\K\s*-){2}.*/', '', $string)
);

我个人并不喜欢这样的想法:调用三个函数来生成一个临时数组,然后只保留前两个元素,然后重新加入数组成为一个连字符分隔的字符串,但是如果你非常讨厌正则表达式,想要这种方法,你应该限制爆炸的数量为N+1,这样就不会创建不必要的元素。(Demo

var_export(
    implode('-', array_slice(explode('-', $string, 3), 0, 2))
);
tyg4sfes

tyg4sfes7#

$string = "Today is - Friday and tomorrow is - Saturday";
 $first_dash = strpos($string, '-');
 $second_dash = strpos($string, '-', $first_dash+1);
 $new_string = substr($string, $second_dash+1);

strpos
substr

相关问题