我需要的只是将wiki模板调用拆分为参数部分。在最基本的情况下,它只是按|
分割,因此{{template|unnamed_parameter|param1=value1}}
将被分为{{template
,unnamed_parameter
,param1=value1
和}}
。< / p>
但是当管道字符用于wikilinks [[link|title]]
等其他目的时,事情变得复杂。
有关如何以最简单的方式完成此任务的任何建议吗? :)
更新:很抱歉可能存在误解,但{{template|unnamed_parameter|param1=value1}}
只是一个例子。有关Wiki模板的更多信息,您可以查看以下资源:http://www.mediawiki.org/wiki/Help:Templates
答案 0 :(得分:0)
请看这个Q&amp; A:How can I fix this wiki link parsing regular expression?
我的回答(在更新部分中)使用perl regex
进行非常相似的Wiki链接解析。
好的,这是你的案例的perl正则表达式:
echo "{{template|unnamed_parameter|param1=value1}}" | \
perl -pe 's#(^|\b)((?![|\[]){{(.+?)\|(.+?)\|(.+?)}}(?![|\]]))($|\b)#{{$3, $4, $5 and }}#g'
Output: {{template, unnamed_parameter, param1=value1 and }}
问:在关闭and
之前,您确定需要}}
,否则只需编辑以上正则表达式:
现在针对字符串[[link|title]]
echo "[[link|title]]" | \
perl -pe 's#(^|\b)((?![|\[]){{(.+?)\|(.+?)\|(.+?)}}(?![|\]]))($|\b)#{{$3, $4, $5 and }}#g'
Output: [[link|title]] # remains unchanged as per your requirements
答案 1 :(得分:-1)
正则表达式假定您的wiki模板总是有3个部分:
更新以排除与模板{{template|[[link|name]]}}
regex: \{\{(.+?)\|[^\[]{2}(.+?)\|(.+?)[^\]]{2\}\} replacment: $1,$2,$3 input: {{template|unnamed_parameter|param1=value1}} output: template,unnamed_parameter,param1=value1
这是一个简单的正则表达式,使用不情愿的量词并使用{}|
转义\
的“特殊”含义
通过将\{\{ \}\}
包含在正则表达式中,可以避免[[ ]]
模式上的匹配。