【发布时间】:2019-09-23 00:23:24
【问题描述】:
我对项目中的某些功能有一个很棒的想法,我已经尽力实现它,但我需要一些帮助才能达到预期的效果。有问题的页面是:http://dev.favorcollective.com/guidelines/(只是为了提供一些上下文)
我正在使用 php 的 preg_replace 来浏览特定页面的内容(巨大的字符串),我让它搜索词汇表术语,然后我用一些 html 包装这些术语,以启用动态词汇表定义工具提示。
这是我当前的代码:
function annotate($content)
{
global $glossary_terms;
$search = array();
$replace = array();
$count=1;
foreach ($glossary_terms as $term):
array_push($search,'/\b('.preg_quote($term['term'],'/').')[?=a-zA-Z]*/i');
$id = "annotation-".$count;
$replacement = '<a href="'.get_bloginfo('url').'/glossary#'.preg_replace( '/\s+/', '', $term['term']).'" class="annotation" rel="'.$id.'">'.$term['term'].'</a><span id="'.$id.'" style="display:none;"><span class="term">'.$term['term'].'</span><span class="definition">'.$term['def'].'</span></span>';
array_push($replace,(string)$replacement);
$count++;
endforeach;
return preg_replace($search, $replace, $content);
}
• 但是,如果我想忽略
• 我还有一个特定的字符串,我不想在其中匹配特定的术语。例如,我希望“熟练度”这个词在“ACTFL 熟练度指南”的上下文中不使用的任何时候都匹配,我将如何为我的正则表达式添加例外?这甚至是一种选择吗?
• 最后,如何将匹配的文本作为变量返回?目前,当我匹配以 's' 或 'ing' 结尾的术语(故意)时,我的脚本会打印匹配的术语,而不是匹配的原始字符串(即,它将“描述”替换为“描述”)。有什么办法吗?
【问题讨论】:
-
欢迎来到 SO!请阅读this introductory article 使用正则表达式处理 HTML。
-
您或其他人能否提供一个示例,说明我尝试使用 PHP HTML 解析器实现的目标?我应该修改我的问题吗?我从来没有新的正则表达式如此有限——我的印象是编程的一切都结束了。圣杯。
-
编程没有圣杯。我认为您不应该以完全改变范围的方式修改这个问题,因为已经有一个相当不错的答案。提出一个新问题来询问解析器示例。