【问题标题】:php - How to replace a char from each word starting from a certain position in each wordphp - 如何从每个单词中的某个位置开始替换每个单词的字符
【发布时间】:2014-07-08 13:22:57
【问题描述】:

如何从每个单词的某个位置开始替换字符串中每个单词的字符?

例如:

$string = "one twone trone fourone nourone";<br />
// I want to replace each n with X starting from second position in each word.<br />
// Last word has n on first position and should remain there.<br />
$new_string = "oXe twoXe troXe fouroXe nouroXe";

【问题讨论】:

  • 可以查看str_replacestr_ireplacepreg_replace的使用情况。

标签: php string replace word each


【解决方案1】:

不太清楚这里首先考虑的是什么n。一种可能的方法:

$string = "one twone trone fourone nourone";
$new_string = preg_replace('/\Bn/', 'X', $string);
// string(31) "oXe twoXe troXe fouroXe nouroXe";

Demo。如您所见,使用了正则表达式替换功能(preg_replace);模式/\Bn 被描述为“匹配所有前面没有单词边界的n 符号”(= '不在单词的开头')。

【讨论】:

  • 抱歉,我说错了。我想替换每个单词中从第二个位置开始的所有字符。所以我需要替换所有字符,而不仅仅是第一次出现。
  • 当您应用此解决方案时,究竟是什么不起作用?即,你能给出一个输入样本和一个你想要的输出(但不要用代码得到)?
  • 我尝试将它与 Ă 和 ă 等变音符号一起使用。我尝试在“ĂĂĂĂononĂ nonĂĂĂnĂĂ”中用ă替换Ă,我得到“ăăăononĂnonĂănĂă”......而不是“Ăăononănonăănăă”。使用变音符号可能有问题?
  • @AlexTz 工作正常here。注意区别(/u 正则表达式修饰符)。
【解决方案2】:

我设法解决了。也许不是最好的方法,但效果很好:

$string = 'ĂĂĂĂonĂ nonĂĂĂnĂĂ';

$string = explode(' ', $string);
$string_output = "";

foreach ($string as $s) {
$first_letter = substr($s,0,1);
$remaining_letters = substr($s,1,25);
$remaining_letters = str_replace("Ă","ă", $remaining_letters);
$s = $first_letter.$remaining_letters;
$string_output .= $s." ";
}
$string = $string_output;

【讨论】:

  • *注意:这将在字符串后添加一个额外的空格。
猜你喜欢
  • 2014-08-11
  • 1970-01-01
  • 2016-03-22
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
相关资源
最近更新 更多