为preg_replace_callback模式添加其他匹配项

问题描述 投票:0回答:1

我正在编辑一个Wordpress脚本,这部分排除了H标签之间的帖子中的任何内容被链接。我想确保某些类或标签之间的某些其他内容也没有链接。

因此,当前代码将仅包含h标签之间的任何内容,但我还需要它以匹配figcaption标签之间的任何内容。但我不想匹配p标签等。

该脚本正在添加词汇表中的链接,我不希望它链接标题和标题。我想我需要另一个表达式,所以它与OR b相匹配。

以下是标题HTML的示例

    <figcaption class="wp-caption-text">Anfisa prepares to</figcaption>

我从那以后试过这个:

((<figcaption.*>)(.*)(</figcaption>)|(<h.*?>)(.*?)(</h.*?>))

但这似乎只是匹配任何一个的第一个实例然后停止。谢谢!

if ($options['excludeheading'] == "on") {

    $text = preg_replace_callback('%(<h.*?>)(.*?)(</h.*?>)%si', function($m) { 
    return $m[1].SEOAutoReSpecChar($m[2]).$m[3];
},
$text

    ...
php wordpress pattern-matching
1个回答
0
投票

通常,您不应该使用正则表达式来解析HTML内容,尤其是嵌套HTML内容时。相反,你应该使用PHP提供的某种类型的解析器。但是,如果您想要使用当前方法的精确解决方案,我们可以尝试匹配开始标记,同时捕获标记的文本。然后,匹配相同的结束标记。

$text = "<figcaption>blah</figcaption>";
$text = preg_replace_callback('%<([^>]+)>(.*?)</\1>%si', function($m) { 
    return $m[2];                         //   ^^^^ backreference
}, $text);
echo "The following text is contained within a single level HTML tag: " . $text;

Demo

© www.soinside.com 2019 - 2024. All rights reserved.