![](/img/trans.png)
[英]Using regex to match combination of words in the same in the same sentence in PHP
[英]Regex: Match words in sentence PHP
我有一个像数组一样的数组
$arr = array("go", "walk", ...)
我想用句子中匹配的链接替换这些单词。 但它应该只是它们完全匹配(例如“walk”应匹配“Walk”或“walk!”但不是“walk”)
替换应该是一个简单的链接,如: < a href='#walk' >walk< /a >
有人有什么想法吗?
匹配每个单词,如“walk”但不是“walk”使用\\ b进行单词bounday。
例如, "\\bwalk\\b"
function magicWords($words, $string) {
$from = $to = array();
foreach($words as $word) {
$from[] = "/\b$word\b/i"; // \b represents a word boundary
$to[] = '<a href="#' . strtolower($word) . '">${0}</a>';
}
return preg_replace($from, $to, $string);
}
$words = array('go', 'walk');
echo magicWords($words, "Lets go walking on a Walk");
这输出:
'Lets <a href="#go">go</a> walking on a <a href="#walk">Walk</a>.'
请注意,它匹配“go”和“walk”,但不匹配“walk”,并且在链接变为小写“#walk”时保持Walk上的大写字母W.
这样,“Walk walk WALK wALk”将链接到#walk,而不会影响原始格式。
尝试这样的事情:
$words = array('walk','talk');
foreach($words as $word)
{
$word = preg_replace("/\b$word\b/","< a href='#$word' >$word< /a >",$word);
}
我认为以下可能是你想要的。
<?php
$someText = 'I don\'t like walking, I go';
$words = array('walk', 'go');
$regex = '/\\b((' . implode('|',$words) . ')\\b(!|,|\\.|\\?)?)/i';
echo preg_replace_callback(
$regex,
function($matches) {
return '<a href=\'' . strtolower($matches[2]) . '\'>' . $matches[1] . '</a>';
},
$someText);
?>
但有几点:
您的示例非常具体,因此很难准确确定您在实践中需要匹配的内容(例如,您是否要在链接中包含'!'),但请尝试以下操作:
<?php
$text = "Walk! I went for a walk today. I like going walking. Let's go walk!";
$needles = array('go', 'walk');
foreach ($needles as $needle)
$text = preg_replace('/\b(' . $needle . ')\b/i', '<a href="#' . $needle . '">$1</a>', $text);
print $text;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.