仅在前3个字符中执行替换

时间:2012-12-21 15:16:47

标签: php

在php中,如何只在字符串的前3个字符中执行替换?

所以:

$str = /pr/printers

Replace 'pr' with 'or'. So its -> /or/printers.

发生在我身上的是,打印机中的pr也在被替换。所以我最终会以/或/或者结束。怎么办呢?

5 个答案:

答案 0 :(得分:2)

使用str_replace()

$str = '/pr/printers';
$str = str_replace("/pr/","/or/",$str);
echo $str;

使用preg_replace()(第4个参数是我设置为1的限制)“

$str = '/pr/printers';
$str = preg_replace("/pr/","or",$str,1);
echo $str;

答案 1 :(得分:2)

$str = '/pr/printers';

$newStr = str_replace('pr', 'or', mb_substr($str, 0, 3)) . mb_substr($str, 3);

答案 2 :(得分:2)

只是我或大多数答案未能解决真正的问题?如果字符串的其余部分匹配会怎么样?他只想要前3个字符在玩。我想我看到一个preg评论提到使用^这也是有道理的。

$originalStr = '/pr/printers';
$prefix = substr($originalStr, 0, 3);
$newStr = str_replace("/pr","/or", $prefix) . substr($originalStr, 3);
echo $newStr;

答案 3 :(得分:0)

$ new = str_replace('/ pr /','/ or /','/ pr / printers');

你也可以使用这样的正则表达式: http://www.laprbass.com/RAY_temp_norman.php

<?php // RAY_temp_norman.php
error_reporting(E_ALL);

$rgx 
= '#'    // REGEX  DELIMITER
. '^'    // START OF STRING
. '/pr'  // PATTERN TO MATCH
. '#'    // REGEX DELIMITER
. 'i'    // OPTIONAL- CASE-INSENSITIVE
;

$str = '/pr/printers';
$rep = '/or';

$new = preg_replace($rgx, $rep, $str);
var_dump($new);

答案 4 :(得分:0)

看一下使用正则表达式,一个可怕的野兽,但如果你要做更多的一般文本操作,曾经掌握了非常强大的功能:

http://webcheatsheet.com/php/regular_expressions.php