【问题标题】:perl one liner -add html tags around matched html elementperl one liner - 在匹配的 html 元素周围添加 html 标签
【发布时间】:2019-11-04 14:10:54
【问题描述】:

我正在使用 MS word 生成(网页,过滤)html,并有一个代码样式,我想用 <pre><code>content</pre></code> 包装它以具有预格式化的文本(包括制表符和空格),以便访问者可以从我的网站。

我知道在 html / xml 上使用正则表达式的注意事项/危险,但这不是问题,因为我控制内容。

输入 html 如下所示:

<table class=Code1 PLAIN_MULTILINE_TEXT_AND_FORMATTING</table>

输出 html 应如下所示:

<pre><code>
<table class=Code1 PLAIN_MULTILINE_TEXT_AND_FORMATTING</table>
</pre></code>

这是我的单行代码,在 bash 脚本中,$1 是文件名:

perl -pi -e 's|<table class=Code1 (.*?)</table>|<pre><code><table class=Code1 $1</table></pre></code>|sg' $1

这没有任何效果。似乎不匹配。

问题:

1 - 怎么了?

2 - 我需要 /s(多行)修饰符

3 - 有没有更好的方法(最终,会将其添加到预缓存/渲染脚本中,以及现有的自动目录和自动弹出定义创建)?

网站:www.rossco.org

谢谢; 比尔

【问题讨论】:

    标签: regex perl replace


    【解决方案1】:

    将此添加到您的 Perl 命令行标志以读取整个文件而不是逐行读取:-0777

    【讨论】:

    • 谢谢,工作!那是 -"zero"777,而不是 "oh",不要放在 -e 和命令之间...
    【解决方案2】:

    为什么不让代码更具可读性呢?拥有原始文件的备份

    可能是个不错的主意
    perl -pi 'orig_*' -0777  -e 's|(<table class=Code1 .*?</table>)|<pre><code>$1</pre></code>|sg' filename
    

    【讨论】:

    • 无备份:因为windoze PC的原始文件,linux/server上的脚本,已经备份文件名:nada,因为bash脚本的一部分,$1是文件名,批处理
    • 原来的帖子没有说明这个衬里是批处理文件的一部分(我怀疑它可能是)。那么 'orig_*' 是不必要的,重新输入也是不必要的,至少对我来说,我的版本更容易理解 wrap 存储值到 &lt;pre&gt;&lt;code&gt; 存储值 &lt;/pre&gt;&lt;/code&gt; .
    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多