【问题标题】:Preg_Replace OptionsPreg_Replace 选项
【发布时间】:2013-08-23 17:16:25
【问题描述】:

我正在尝试在文本的中间添加一些东西,就像那样。

PrivateImg-0123456789_[我想在这里添加一些东西].jpg

而且我不知道我应该使用哪种功能或方式。

我想知道preg_replace这个函数,但我不知道你是否可以让这个函数替换某个位置的特定文本。

【问题讨论】:

  • 你怎么知道你想在哪里插入文本?标准是什么?
  • 你的“文本”总是以“.jpg”结尾吗?
  • 不,文本总是以 JPG、PNG 或 GIF 结尾
  • 使用 strrpos、substr 和字符串连接更容易做到这一点。请看下面我的回答

标签: php replace options


【解决方案1】:

如果你想在扩展之前插入文本,试试这个:

$string = 'PrivateImg-0123456789.jpg';
$pattern = '/(.+?)(\.[^\.]+)/';
$text_to_insert = '_I wanna add here something';
$replacement = '${1}' . $text_to_insert . '$2';
echo preg_replace($pattern, $replacement, $string);

模式说: (.+?) 匹配和分组除 \n 1 次或多次以外的任何字符

然后 (.[^.]+) 匹配和分组。特点 '。'和任何字符,除了:'.' 1次以上

【讨论】:

  • 也许对这个正则表达式的工作原理添加一点评论?这很难阅读,特别是对于正则表达式初学者
  • 确保它说:(.+?) 匹配并分组除 \n 之外的任何字符 1 次或多次,然后 (\.[^\.]+) 组 \。特点 '。'和任何字符,除了:'.' 1 次或更多次,因此您获得了 2 个这些组,并在它们之间插入 $text_to_insert
【解决方案2】:

如果不使用 preg_replace,这段代码会怎样。可能会增加一行/多行代码,但绝对比 preg_replace 解决方案更容易

<?php
$string = 'PrivateImg-0123456789.jpg';
$text_to_insert = '_I wanna add here something';
$pos = strrpos($string,".");
$string = substr($string,0,$pos) . $text_to_insert . substr($string,$pos);
print $string;
?>

【讨论】:

    【解决方案3】:

    只需使用str_replace()

    $string = "PrivateImg-0123456789.jpg";
    echo str_replace(".jpg", "[whateveryouwant].jpg", $string);
    

    如果你必须使用正则表达式:

    $string = "PrivateImg-0123456789.jpg";
    echo preg_replace("/\.(jpe?g|png|gif)$/si", "[whateveryouwant].$1", $string);
    

    只要是最后一部分,就可以生成 jpg、jpeg、png 和 gif。 /foo/bar.gif/thisIsWeird 不匹配

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多