需要帮助创建在html文件上运行的正则表达式或脚本

时间:2011-09-01 18:23:56

标签: html regex perl

所以我有这个索引,我正在努力,但我真的觉得手动进入并交叉链接一切都很麻烦。我对regexps和一点perl有点了解。 这是html的样子

cf. <i>Penitencia y Reconciliaci&oacute;n</i>

但有时会有这个

的实例
cf. <i>Advenimiento, Consumaci&oacute;n, Expectaci&oacute;n</i>;

我在上面运行了这个正则表达式:

cf\. <i>([^,]+,)</i>

但我的目标是能够运行一个包含一个或多个单词的正则表达式,然后复制“短语”的内部Html并将其粘贴到锚标记内 像这样的东西

cf. <i><a href="#Penitencia y Reconciliaci&oacute;n">Penitencia y Reconciliaci&oacute;n</a></i>

我能用上面的正则表达式完成;但问题是我的正则表达式是不采取的 考虑到它可能需要包含两个“短语”。所以我的目标是最终得到这个:

cf. <i><a href="#Advenimiento">Advenimiento</a>, <a href="#Consumaci&oacute;n">Consumaci&oacute;n</a>, <a href="#Expectaci&oacute;n">Expectaci&oacute;n</a></i>;

任何帮助都会非常感激

1 个答案:

答案 0 :(得分:1)

在创建自动化程序的环境中,更好,更难,更快,更强的解决方案 - 我同意对OP的评论 - 是使用DOM查找/解析/查询标签,得到值,然后修改和重写它们。我假设您的具体示例是一次性的查找和替换,或者您不介意的事情 - 每隔一段时间手动运行替换...

一个Perl s // - 表达式(我想p !! - 在这种情况下表达式),它只在模拟器中测试过:

s!(?<=,)(\s?)([^<,]+)(?=,|</i>)|(?<=<i>)([^<,]+)(?=,|</i>)!$1<a href="#$2$3">$2$3</a>!i

请记住,正如所写的那样,这只会匹配<i>标签中包含的项目,当然也不能容忍它们之间的其他标签 - 只是您不应该将其纳入程序的几个原因代码...

该表达式将转换此HTML:

Parte del texto inicial. <i>Penitencia y Reconciliaci&oacute;n</i> 
<i>Advenimiento, Consumaci&oacute;n, Expectaci&oacute;n</i>; Otro texto que <em>no es especial</em> ... <i>Otra etiqueta que debe estar vinculada</i>
Otra l&iacute;nea <i>con un enlace</i> y un texto m&aacute;s.

进入本文:

Parte del texto inicial. <i><a href="#Penitencia y Reconciliaci&oacute;n">Penitencia y Reconciliaci&oacute;n</a></i> 
<i><a href="#Advenimiento">Advenimiento</a>, <a href="#Consumaci&oacute;n">Consumaci&oacute;n</a>, <a href="#Expectaci&oacute;n">Expectaci&oacute;n</a></i>; Otro texto que <em>no es especial</em> ... <i><a href="#Otra etiqueta que debe estar vinculada">Otra etiqueta que debe estar vinculada</a></i>
Otra l&iacute;nea <i><a href="#con un enlace">con un enlace</a></i> y un texto m&aacute;s.

作为旁注,你的问题很难阅读,也可能应该被标记为[perl];这可能对它暂时没有得到回答有很大帮助......但迟到总比没有好!