PHP替换文本

时间:2015-08-12 15:51:58

标签: php string match

我想在我的字符串(长文本)

中替换匹配我的数组中单词的单词

这是我的数组的外观:

array(
 0 => "hello",
 1 => "author",
 2 => "cars",
)

这是我的字符串的外观:

Lorem ipsum dolor坐下来,缺点 etetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua。在vero eos e t accusam et jus to duo dolores et ea rebum。 STET clita kasd gubergren,no sea takimata s anctus est Lorem ipsum dolor 你好坐下来。 Lorem ipsum dolor坐着 遇见了,念念 scing elitr,sed diam nonumy eirmod tempor invidunt ut 劳伦·多洛尔·马格纳·阿利亚姆·埃拉特,塞德迪 我是志愿者。 汽车在vero eos et accusam et justo duo dolores 等等。 Stet clita 作者,kasd gubergren,no sea takimata sanctus est Lorem ipsum dolor sit amet。

这应该发生 每个匹配(名称为MATCH)都应该像这样替换:

<a alt="MATCH" href="/link/MATCH">MATCH</a>

我试图解决这个问题好几个小时,但我只是不知道如何提出解决方案......

如果后面没有空格,也应该替换该词。

3 个答案:

答案 0 :(得分:1)

从你的单词

创建一个模式

方法1

$search = array(
     0 => "hello",
     1 => "author",
     2 => "cars",
    );
$replace =  '<a alt="MATCH" href="/link/MATCH">MATCH</a>';

$patt = '/\b('.implode('|', $search).')/i';
$subject = preg_replace($search, $replace, $subject);

方法2

 str_ireplace( $search, $replace, $subject);

方法2更简单,但不太有用,因为它更难以支持引用匹配的单词。

如果您想要MATCH或匹配的文字,请感到困惑。如果您希望匹配的文本使用Method1,而将此替换为

 $replace =  '<a alt="$1" href="/link/$1">$1</a>';

例如

https://regex101.com/r/pL4iA4/2

为了解释这是如何工作的,模式看起来应该是这样的

 '/\b(hello|author|cars)/i'

那么用简单的英语是什么意思

  • \b字边界(空格或特殊字符)
  • ( )括号捕获组
  • 单个单词是字面匹配
  • |或运营商
  • /i不区分大小写

所以基本上捕获任何以word list

开头的单词

答案 1 :(得分:0)

$text = // ...

$listOfPhrasesThatShouldBeLinks = [
    'hello',
    'author',
    'cars'
];

$quotedListForRegex = array_map(
    function ($phrase) {
        return preg_quote($phrase);
    },
    $listOfPhrasesThatShouldBeLinks
);

$regex = '(' . implode('|', $quotedListForRegex) . ')/i';

$textWithLinks = preg_replace_callback(
    $regex,
    function (array $matches) {
        $escapedMatch = htmlentities($matches[1]);
        return '<a alt="' . $escapedMatch . '" href="/link/' . $escapedMatch . '">' . $escapedMatch . '</a>';
    },
    $text
);

答案 2 :(得分:0)

你可以试试这个:

    <?php

    $a=array(
     0 => "hello",
     1 => "author",
     2 => "cars",
    );

    $text = 'Lorem ipsum dolor sit amet, cons etetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos e t accusam et jus to duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata s anctus est Lorem ipsum dolor hello sit amet. Lorem ipsum dolor sit a met, consetetur sadip scing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed di am voluptua. carsAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita author, kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.';
    $text = str_ireplace($a,'<a alt="MATCH" href="/link/MATCH">MATCH</a>',$text);
    echo $text;