【问题标题】:Adding letter to every word in variable(string)为变量(字符串)中的每个单词添加字母
【发布时间】:2017-01-04 16:21:37
【问题描述】:

我有变量

$test = "test1<br />
         test2<br />
         test3";

我想在字符串中的每个单词之前添加一个字母。此外,字符串在我发布时包含中断标签。

想要看起来像:

$test = "Ptest1<br />
         Ptest2<br />
         Ptest3";

【问题讨论】:

  • 我试过 preg_replace('^(\h*[A-Za-z])','P$1',$arr);但我未能设置 preg_replace 模式

标签: php regex append


【解决方案1】:

您可以使用正则表达式遍历字符串并添加您的值。

$arr = "test1<br />
         test2<br />
         test3";
echo preg_replace('/^(\h*)([A-Za-z])/m','$1P$2',$arr);

PHP 演示:https://eval.in/630398
正则表达式演示:https://regex101.com/r/xV9nY0/1

/s 是表示正则表达式开始和结束位置的分隔符。
m 修饰符使^ 匹配在每行的开头。
\h* 是字母字符之前的任意数量的空格(如果其他字符也应该添加到该字符类中,您可以添加到该字符类中)被允许)。

要让行也以数字开头,请尝试:

echo preg_replace('/^(\h*)([A-Za-z\d])/m','$1P$2',$arr);

【讨论】:

  • 如果我添加例如 05/2016 它不会添加任何东西
  • 在字符类中添加\d,那么下一行也可以以数字开头。
  • 当我在 eval.in 中尝试它的工作但在我的代码中它只将 P 添加到第一行
  • 是的。和你的一样
  • 嗯,这很难诊断。它在这里工作吗,3v4l.org
【解决方案2】:
$test = "test1<br />
         test2<br />
         test3";

$temp_test = [];

$char = 'P';

$data = explode('<br />', $test);

foreach($data as $key => $value) {
    $temp_test[] = $char.''.trim($value);
}

$new_test = implode('<br />', $temp_test);

【讨论】:

  • 它在 P 之后添加了一些空格,我不知道为什么
  • 因为换行了。尝试上述修剪空白。
【解决方案3】:

使用preg_replace 函数和特定正则表达式模式的单行解决方案:

$letter = "P";
$replaced = preg_replace("/(?<=[^<]|^)\b(\w+?)\b/", $letter. "$1", $test);

DEMO link

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2018-11-28
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多