[英]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
此外,您还可以找到大量在线正则表达式测试器。 这是一个包含快速参考的内容,还允许您切换正则表达式引擎(有一些,有些可能与其他引擎略有不同):
** 我更喜欢将变量包装在花括号中,以更明确地表明我正在插入值,但它是可选的。 这看起来像", {$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.