2013-02-23 69 views
3

我想Wiki标记转换为HTML标记,即快速Perl的正则表达式不终止

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

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

一直抛出错误

替换替换没有终止

它工作在this RegExr test和改变分隔符没有固定的问题。任何有识之士将不胜感激。

+0

你能张贴您的整个Perl代码是什么? – 2013-02-23 02:46:27

+0

点是用正则表达式做完全,perl的仅仅是 '而(<>){S /正则表达式/替换;' '打印;}' – kqualters 2013-02-23 02:47:32

回答

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."/> 
+0

啊谢谢你,我不知道是什么我刚在想。 – kqualters 2013-02-23 02:55:48

5

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

替代运算符s由三部分组成:s/PATTERN/REPLACEMENT/FLAGS

您的代码有s/PATTERN/g

也就是说,您有一个替换组成g但不终止/