我有以下preg_replace
foreach ($financeTermsArray as $term => $info) {
$content = preg_replace($term, $info, $content, 1);
}
$info变量如下所示的位置
'<a class="glossar-word" href="' . get_permalink() . '" data-glossar="' . $excerpt . '">' . get_the_title() . '</a>';
和$term
变量,如"/b" . get_the_title() . "b/"
我想从preg_replace
排除匹配的单词是否在 html 属性data-glossar
。
我该怎么做?
我使用以下模式得到了它:
"/data-glossar="([^"]*)(*SKIP)(*F)|b" . get_the_title() . "b/"
这是一个在运行时用get_the_title()
构造的正则表达式.
当正则表达式被构造时,它将跳过 html 中的所有标签,包括
不可见的内容,并且只会匹配'b' . get_the_title() . 'b'
在OUT 标签中找到。
无论如何,我都不必测试生成的正则表达式字符串,所以您应该首先这样做
,看看它看起来是否正常。
按照最初的意图在preg_replace上使用它。
$term = '~<(?:(?:(?:(script|style|object|embed|applet|noframes|noscript|noembed)(?:s+(?>"[Ss]*?"|'[Ss]*?'|(?:(?!/>)[^>])?)+)?s*>)[Ss]*?</1s*(?=>))|(?:/?[w:]+s*/?)|(?:[w:]+s+(?:"[Ss]*?"|'[Ss]*?'|[^>]?)+s*/?)|?[Ss]*??|(?:!(?:(?:DOCTYPE[Ss]*?)|(?:[CDATA[[Ss]*?]])|(?:--[Ss]*?--)|(?:ATTLIST[Ss]*?)|(?:ENTITY[Ss]*?)|(?:ELEMENT[Ss]*?))))>(*SKIP)(*FAIL)|'
. 'b' . get_the_title() . 'b~';