PHP 替换文本中数组中的单词
PHP Replace words from Array in text
我想在我的字符串(长文本)中替换与数组中的单词匹配的单词
我的数组是这样的:
array(
0 => "hello",
1 => "author",
2 => "cars",
)
这是我的字符串的样子:
事实是疼痛本身很重要,缺点
食欲不振的精英
但他们羡慕家园和劳动一样多
这在某种程度上是巨大的痛苦,但却是对家的满足。但他们确实
收费和权利
受两种痛苦,我要责备他们。他站在
clita kasd gubergren, no sea takimata s
你好很好客户应该是客户
相遇,圆满解决
scing elitr,但 diam nonumy eirmod 羡慕那个
对一些人来说这是一项伟大的工作和痛苦,但上帝
我很满意。 cars但确实我会指责他们而且只是两个痛苦
我要斥责他们。 Stet clita author, kasd gubergren, no sea takimata
他是圣人。
这应该发生
每个匹配项(将其命名为 MATCH)都应该这样替换:
<a alt="MATCH" href="/link/MATCH">MATCH</a>
我试图解决这个问题几个小时,但我就是不知道如何想出一个解决方案...
这个词如果后面没有space也应该被替换掉。
用你的话创造一个模式
方法一
$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);
方法二
str_ireplace( $search, $replace, $subject);
方法 2 更简单,但不太有用,因为它更难向后引用匹配的词。
如果您想要 MATCH
或匹配的文本,有点困惑。如果您想要匹配的文本,请使用 Method1 并将其用于替换
$replace = '<a alt="" href="/link/"></a>';
例如
https://regex101.com/r/pL4iA4/2
只是为了解释这是如何工作的,模式应该是这样的
'/\b(hello|author|cars)/i'
所以用简单的英语来说就是
\b
字边界(space 或特殊字符)
( )
括号捕获组
- 个别单词是字面匹配
|
or 运算符
/i
不区分大小写
所以基本上捕获任何以word list
开头的单词
$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
);
你可以试试这个:
<?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;
我想在我的字符串(长文本)中替换与数组中的单词匹配的单词
我的数组是这样的:
array(
0 => "hello",
1 => "author",
2 => "cars",
)
这是我的字符串的样子:
事实是疼痛本身很重要,缺点 食欲不振的精英 但他们羡慕家园和劳动一样多 这在某种程度上是巨大的痛苦,但却是对家的满足。但他们确实 收费和权利 受两种痛苦,我要责备他们。他站在 clita kasd gubergren, no sea takimata s 你好很好客户应该是客户 相遇,圆满解决 scing elitr,但 diam nonumy eirmod 羡慕那个 对一些人来说这是一项伟大的工作和痛苦,但上帝 我很满意。 cars但确实我会指责他们而且只是两个痛苦 我要斥责他们。 Stet clita author, kasd gubergren, no sea takimata 他是圣人。
这应该发生 每个匹配项(将其命名为 MATCH)都应该这样替换:
<a alt="MATCH" href="/link/MATCH">MATCH</a>
我试图解决这个问题几个小时,但我就是不知道如何想出一个解决方案...
这个词如果后面没有space也应该被替换掉。
用你的话创造一个模式
方法一
$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);
方法二
str_ireplace( $search, $replace, $subject);
方法 2 更简单,但不太有用,因为它更难向后引用匹配的词。
如果您想要 MATCH
或匹配的文本,有点困惑。如果您想要匹配的文本,请使用 Method1 并将其用于替换
$replace = '<a alt="" href="/link/"></a>';
例如
https://regex101.com/r/pL4iA4/2
只是为了解释这是如何工作的,模式应该是这样的
'/\b(hello|author|cars)/i'
所以用简单的英语来说就是
\b
字边界(space 或特殊字符)( )
括号捕获组- 个别单词是字面匹配
|
or 运算符/i
不区分大小写
所以基本上捕获任何以word list
$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
);
你可以试试这个:
<?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;