Regex 在perl中查找匹配字符串的第一次和最后一次出现

Regex 在perl中查找匹配字符串的第一次和最后一次出现,regex,perl,Regex,Perl,要为一组标记插入打开和关闭元素 输入 Para1 帕拉2 帕拉3 预期产量 <div> <para>Para1</para> <para>Para2</para> <para>Para3</para> </div> 帕拉1 帕拉2 帕拉3 如何找到第一个和最后一个出现的([^\只需将regexp从第一个跨越到最后一个,并将放在它周围:s#(*)\n$1\n\s 编辑:正如

要为一组
标记插入打开和关闭元素

输入

Para1

帕拉2

帕拉3

预期产量

 <div>
   <para>Para1</para>
   <para>Para2</para>
   <para>Para3</para>
 </div>

帕拉1
帕拉2
帕拉3

如何找到第一个和最后一个出现的
([^\只需将regexp从第一个
跨越到最后一个
,并将
放在它周围:
s#(*)\n$1\n\s


编辑:正如@mbethke所注意到的,要想让
跨越多个换行符,你必须使用。

如果你的输入包含换行符,不要忘记regexp的/s修饰符。另一个想法:为什么要手工操作呢?像
Mojo::DOM
这样的模块的存在使得这非常简单和安全。简单的手工制作的regexp是u通常很脆弱,只有当你很了解你的输入并且速度非常重要时才是一个好主意。我试图通过将变量变成1来识别第一个
集,比如
$I=1;$I=$I+1;如果$I=1,那么它是第一个。但是我找不到最后一个。用这种方式找到了什么想法吗?我真的不明白你的意思;my regexp将在一次尝试中跨越整个
图形集。请不要为此作业使用正则表达式。它们是错误的工具。说真的。它们不太擅长“处理”标记语言,如XML和HTML。请参阅:使用语法分析器。如果这是HTML,请使用HTML语法分析器。如果是XML,请使用XML语法分析器。(有一些共同点,XML更严格)同意,OP正在解释他想做什么,但不是为什么他想做。我们首先需要这些信息,以便能够给出正确的建议。
 <div>
   <para>Para1</para>
   <para>Para2</para>
   <para>Para3</para>
 </div>