没有正则表达式的匹配短代码

彼得·古森

我已经读过很多书,使用正则表达式不是获取和操作html的最明智的方法,您应该利用DOMDocument我已经从文档和此处重构了一些代码,并创建了两个函数以拆分the_content()为文本和标签。第一个函数删除特定的标签并返回没有标签的内容,第二个函数返回标签的内容而没有其他内容

function get_content_without( $html, $tag )
{
    $dom = new DOMDocument;
    $dom->loadHTML( $html );

    $dom_x_path = new DOMXPath( $dom );
    while ($node = $dom_x_path->query( $tag )->item(0)) {
        $node->parentNode->removeChild( $node );
    }
    return $dom->saveHTML();
}

function get_html_tag_content( $html, $tag )
{
    $document = new DOMDocument();
    $document->loadHTML( $html );  

    $tags = [];
    $elements = $document->getElementsByTagName( $tag );
    if ( $elements ) {
        foreach ( $elements as $element ) {
            $tags[] = $document->saveHtml($element);
        }   
    }   
    return $tags;
}

概念证明:(这里我们从a标记中拆分文本

$html = '<a href="http://localhost/wordpress/image3/tags-sidebar/" rel="attachment wp-att-731">
        <img src="http://localhost/wordpress/wp-content/uploads/2014/12/tags-sidebar.jpg" alt="tags sidebar" width="318" height="792" class="alignright size-full wp-image-731" />
    </a>
    Cras malesuada turpis et augue feugiat, eget mollis tellus elementum. 
    Nunc posuere mattis arcu, ut varius ipsum molestie in. 
    Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; 
    Morbi ultricies tincidunt odio nec suscipit. Sed porttitor metus ut tincidunt interdum. 
    Etiam lobortis mollis augue at aliquam. Nunc venenatis elementum quam sed elementum. 
    Pellentesque congue pellentesque orci, vel convallis augue semper vitae';

?><pre><?php var_dump(get_html_tag_content($html, 'a')); ?></pre><?php  
?><pre><?php var_dump(get_content_without($html, '//a')); ?></pre><?php 

我的问题是,在Wordpress中是否有类似匹配和删除短代码的内容。Wordpress的内置功能确实很糟糕,并且可以匹配所有短代码。

我发现许多使用正则表达式的示例,但没有使用DOM的示例。这是短码的两个例子

  • [audio mp3="http://localhost/wordpress/wp-content/uploads/2014/09/Aha-The-Sun-Always-Shines-On-TV.mp3"][/audio]

  • [gallery ids="734,731,725,721"]

如何匹配音频简码以及如何匹配图库简码。是否可以不使用正则表达式和DOM?如何实现?

Cpilko

仅使用DOM不可能隔离短代码。

字符[]在HTML或XML没有特殊含义。因此,对于DOM解析器而言,[shortcode]ipsum上面的示例文本没有什么不同它只是文本节点的另一部分,因此定位它们的唯一方法是通过字符串函数,例如使用正则表达式。

Shadow DOM是本质上是本机HTML短代码的新兴标准。到目前为止,本地支持还很薄弱如果您想用可解析的DOM替换您的短代码,这就是方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在不使用正则表达式的情况下匹配短代码

来自分类Dev

使用正则表达式匹配短代码中的字符串

来自分类Dev

正则表达式提取短匹配

来自分类Dev

使用正则表达式的Python替换短代码

来自分类Dev

在php中用正则表达式替换短代码

来自分类Dev

正则表达式类似于WordPress短代码

来自分类Dev

正则表达式以匹配没有匹配文件名的url目录路径

来自分类Dev

正则表达式以匹配Markdown代码块

来自分类Dev

正则表达式:匹配非嵌套代码块

来自分类Dev

正则表达式匹配的排序代码

来自分类Dev

使用匹配的正则表达式代码替换单词

来自分类Dev

正则表达式以匹配HTML代码中的模式

来自分类Dev

正则表达式:匹配非嵌套代码块

来自分类Dev

与bash中的语言代码匹配的正则表达式

来自分类Dev

正则表达式以匹配字母数字代码

来自分类Dev

匹配多行javascript代码的Python正则表达式

来自分类Dev

正则表达式代码找不到匹配项

来自分类Dev

正则表达式匹配正则表达式模式之外的所有内容

来自分类Dev

有没有办法只将顶级括号与正则表达式匹配?

来自分类Dev

awk:有没有办法过滤不匹配的正则表达式?

来自分类Dev

有没有办法使用正则表达式匹配ansible中的主机?

来自分类Dev

有没有办法只将顶级括号与正则表达式匹配?

来自分类Dev

awk:有没有办法过滤不匹配的正则表达式?

来自分类Dev

PHP正则表达式;提取WordPress短代码中的第一个匹配ID

来自分类Dev

正则表达式代码,用于检测特定文本之前的所有匹配项

来自分类Dev

如何使用正则表达式匹配所有表情符号的“\u”代码?

来自分类Dev

Elasticsearch 正则表达式没有前进,但正则表达式模式是正确的

来自分类Dev

Python正则表达式:匹配没有高速公路名称的车速

来自分类Dev

正则表达式匹配没有全限定名的类名

Related 相关文章

  1. 1

    在不使用正则表达式的情况下匹配短代码

  2. 2

    使用正则表达式匹配短代码中的字符串

  3. 3

    正则表达式提取短匹配

  4. 4

    使用正则表达式的Python替换短代码

  5. 5

    在php中用正则表达式替换短代码

  6. 6

    正则表达式类似于WordPress短代码

  7. 7

    正则表达式以匹配没有匹配文件名的url目录路径

  8. 8

    正则表达式以匹配Markdown代码块

  9. 9

    正则表达式:匹配非嵌套代码块

  10. 10

    正则表达式匹配的排序代码

  11. 11

    使用匹配的正则表达式代码替换单词

  12. 12

    正则表达式以匹配HTML代码中的模式

  13. 13

    正则表达式:匹配非嵌套代码块

  14. 14

    与bash中的语言代码匹配的正则表达式

  15. 15

    正则表达式以匹配字母数字代码

  16. 16

    匹配多行javascript代码的Python正则表达式

  17. 17

    正则表达式代码找不到匹配项

  18. 18

    正则表达式匹配正则表达式模式之外的所有内容

  19. 19

    有没有办法只将顶级括号与正则表达式匹配?

  20. 20

    awk:有没有办法过滤不匹配的正则表达式?

  21. 21

    有没有办法使用正则表达式匹配ansible中的主机?

  22. 22

    有没有办法只将顶级括号与正则表达式匹配?

  23. 23

    awk:有没有办法过滤不匹配的正则表达式?

  24. 24

    PHP正则表达式;提取WordPress短代码中的第一个匹配ID

  25. 25

    正则表达式代码,用于检测特定文本之前的所有匹配项

  26. 26

    如何使用正则表达式匹配所有表情符号的“\u”代码?

  27. 27

    Elasticsearch 正则表达式没有前进,但正则表达式模式是正确的

  28. 28

    Python正则表达式:匹配没有高速公路名称的车速

  29. 29

    正则表达式匹配没有全限定名的类名

热门标签

归档