PHP preg_replace如何排除大小写



我有以下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~';

最新更新