我目前正在使用preg_match_all()
查找以特定前缀开头的所有单词。例如,如果前缀是cat
,catsup
则将被视为匹配,而housecat
不会。
一旦找到这些实例和它们的偏移量,我就在它们之间循环,基本上用锚标记封装它们。
(问题在代码下方继续)
//Escape all non-standard characters
$preffix = sanitizePreffix($part['modlnoPreffix']);
//All Words Starting with preffix string
$pattern = "/".$preffix.'/';
//Find Matches
preg_match_all($pattern , $item['body'], $matches,PREG_OFFSET_CAPTURE);
$matches = array_reverse($matches[0]);
if (count($matches)>0){
foreach ($matches as $match){
$text = $match[0];
$offset = (int)$match[1];
$endOffset = $offset + strlen($text);
$url = "/specsheet_getPreffixParts.php?m=".urlencode($text);
//Insert ending </a> Tag
$item['body'] = str_insert('</a>', $item['body'], $endOffset);
//Insert Starting <a ...> Tag
$item['body'] = str_insert("<a rel='".$url."' href='javascript:void(0);'>", $item['body'], $offset);
}
}
一个问题是我需要检查每个结果索引以确保
- 结果还没有像
<a href='...'>catsup</a>
- 结果不在起始
<a>
标签本身之内<a href='/part/catsup'> ... </a>
我确信我可以轻松地创建一个函数,该函数一次后退一个字符搜索<a
,然后一次前进一个字符查找</a>
,但这对我来说似乎有点傻。
我的问题是:有没有更好的方法来做到这一点?我最初的直觉是让这部分成为preg_match_all
- 换句话说......使用的初始搜索模式的一部分。
我怎么会find all words that start with 'cat' but are not located between a '<a' and a '</a>'