繁体   English   中英

使用 PHP 在特定点将字符串插入字符串

[英]Insert a string into a string at a specific point using PHP

我想知道是否有办法在特定点(在这种情况下,接近结尾)将字符串插入另一个字符串? 例如:

$string1 = "item one, item two, item three, item four";
$string2 = "AND";

//do something fancy here

echo $string1;

OUTPUT:
项目一、项目二、项目三和项目四

我需要一些关于花哨的字符串工作部分的帮助。 如果可能的话,基本上在最后一个“,”之后插入单词。

有很多方法可以做到这一点-但是由于您特别指出“在最后一个, ”,因此strrpos似乎是合适的:

// insert this line where you indicate 'do something fancy here'
$string1 = substr_replace($string1, " ".$string2, strrpos($string1,",")+1, 0);

找到最右边的逗号并在其后插入一个 position 的$string2 (前面有一个空格)。 最后一个参数表示要替换的 substring 的长度,因此0表示“不替换任何内容,只插入”。

请注意添加到$string2的额外空间。 显然,您可以修改$string2的初始化方式以包含空格并消除这部分。

您可以为此使用 preg_replace,我发现它比其他字符串操作方法更简洁,并且如果您的用例应该更改,也更容易适应:

$string1 = "item one, item two, item three, item four";
$string2 = "AND";

$pattern = "/,(?!.*,)/";
$string1 = preg_replace($pattern, ", $string2", $string1);

echo $string1;

在哪里传递 preg_replace 正则表达式模式、替换字符串和原始字符串。 preg_replace 不会修改原始字符串,而是返回一个新字符串,因此您将设置$string1等于 preg_replace 的 output。

模式:您可以使用任何分隔符来表示表达式的开始和结束。 通常我会看到 / used*,所以表达式将是“/pattern/”,并且在模式存在的地方存在逗号和负前瞻 (?.) 以查找后面没有另一个逗号的逗号。 不需要显式声明 $pattern,您可以直接在 preg_replace arguments 中使用表达式。 但有时将模式声明与其使用分开可能会更容易一些(尤其是对于复杂模式)。

替换: preg_replace 将替换整个匹配项,因此您需要在替换文本前加上逗号(即将被替换)和空格。 由于用双引号括起来的变量是在字符串中计算的,因此您将 $string2 放在引号内**。

目标:您只需将原始字符串放在这里。

* 我更喜欢使用 ~ 作为我的分隔符,因为 / 在处理 url 时开始变得很麻烦,但你可以使用任何东西。

这是正则表达式模式的备忘单,但其中有很多浮动。 如果需要,只需 google 正则表达式备忘单。

https://www.rexegg.com/regex-quickstart.html

此外,您还可以找到大量在线正则表达式测试器。 这是一个包含快速参考的内容,还允许您切换正则表达式引擎(有一些,有些可能与其他引擎略有不同):

https://regex101.com/

** 我更喜欢将变量包装在花括号中,以更明确地表明我正在插入值,但它是可选的。 这看起来像", {$string2}"

您可以使用模式匹配字符串中的最后一个逗号,使用.*,然后使用\K忘记到目前为止匹配的内容。

在替换使用AND

$string1 = "item one, item two, item three, item four";
$string2 = " AND";
$string1 =  preg_replace("/.*,\K/", $string2, $string1);
echo $string1;

Output

item one, item two, item three, AND item four

请参阅PHP 演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM