Quick Regex Perl未终止

时间:2013-02-23 02:41:54

标签: regex perl

我正在尝试将Wiki标记转换为HTML标记,即

[[Image:wiki.png]]
[[Image:wiki.png|Wikipedia, The Free Encyclopedia.]]

<img src="wiki.png" alt=""/>
<img src="wiki.png" alt="Wikipedia, The Free Encyclopedia."/>

使用一行Perl

s/\[\[Image:(\w+?\.png)\|{0,1}(.*?)\]\]/g;
print;

但是Perl不断抛出错误

  

替换替换未终止

它适用于this RegExr test并且更改分隔符并未解决问题。任何见解都会非常感激。

2 个答案:

答案 0 :(得分:5)

Perl告诉你替换替换没有终止,而不是“替换/替换没有终止”。

替换运算符s包含三个部分:s/PATTERN/REPLACEMENT/FLAGS

您的代码有s/PATTERN/g

也就是说,您有一个由g组成但没有终止/的替换。

答案 1 :(得分:5)

你有一个没有替换字符串的正则表达式替换。它应该看起来像

s/PATTERN/REPLACEMENT/

你只有

s/PATTERN/

所以Perl告诉你替换没有终止。

此程序使用正则表达式执行您想要的操作

use strict;
use warnings;

for (<DATA>) {
  s/\[\[Image:(\w+?\.png)\|{0,1}(.*?)\]\]/<img src="$1" alt="$2"\/>/g;
  print;
}

__DATA__
[[Image:wiki.png]]
[[Image:wiki.png|Wikipedia, The Free Encyclopedia.]]

<强>输出

<img src="wiki.png" alt=""/>
<img src="wiki.png" alt="Wikipedia, The Free Encyclopedia."/>