Regex,我就是不知道';我没弄对
我只是没弄好我的正则表达式: 我有以下模板:Regex,我就是不知道';我没弄对,regex,Regex,我只是没弄好我的正则表达式: 我有以下模板: <!-- Defines the template for the tabs. --> {{TMPL:Import=../../../../Data/Templates/Ribbon/tabs.tmpl; Name=Tabs}} <div class="tabs"> <ul role="tablist"> {{BOS:Sequence}} <li role="tab"
<!-- Defines the template for the tabs. -->
{{TMPL:Import=../../../../Data/Templates/Ribbon/tabs.tmpl; Name=Tabs}}
<div class="tabs">
<ul role="tablist">
{{BOS:Sequence}}
<li role="tab" class="{{TabType}}" id="{{tabId}}">
<span>{{TabFile}}</span>
</li>
{{EOS:Sequence}}
</ul>
</div>
{{Render:Tabs}}
这会选择{{}
标记之间的所有内容,这是不好的
尝试2:
({{).*(}})
({{)[^TMPL][^BOS][^EOS][^Render].*(}})
这将使{{TabType}}
和{{TabFile}}
不再被选中,我只是不知道为什么
对于其他一些正则表达式,我得到{{TabType}}”id=“{{tabId}}
被选为一个匹配项
有人知道如何解决这个问题吗,我真的需要一个正则表达式专家:-)你必须使用以下正则表达式来获取大括号之间的内容:
\{\{(.*?)\}\}
如果您想从发布的评论中排除内容,可以使用正则表达式技术排除您不想要的内容,并在正则表达式末尾保留您想要的内容:
\{\{BOS:Sequence\}\}|\{\{EOS:Sequence\}\}|\{\{TMPL:Import.*?\}\}|\{\{Render:Tabs\}\}|\{\{(.*?)\}\}
顺便说一下,如果您想为上述正则表达式创建快捷方式,可以使用:
\{\{(?:BOS|EOS):Sequence\}\}|\{\{TMPL:Import.*?\}\}|\{\{Render:Tabs\}\}|\{\{(.*?)\}\}
这是一种非常有用的模式排除技术,我很高兴能从Anubhava和zx81(他们使用正则表达式模式)那里学到它。对于此正则表达式技术,您可以使用捕获组找到所需的内容(查看下面屏幕截图上的绿色突出显示):
使用
[^TMPL]
之类的方法是行不通的,因为它们是字符类。不过,您可以使用负向前看(或者甚至向后看,具体取决于您使用的正则表达式库)
我仍然觉得您希望BOS
,EOS
等只是模板中的字符串,带有{{
和其他要插值的值。如果您使用的是把手或其他东西,您可以插值字符串:
{{'{{BOS:Sequence}}'}}
您可以像这样使用基于负前瞻的正则表达式:
{{(?!TMPL|[BE]OS|Render).*?}}
但是现在一切都找到了,我不想要{{BOS:Sequence},{{EOS:Sequence},{{TMPL:Import=../../../../../../Data/Templates/Ribbon/tabs.TMPL;Name=tabs}}和{Render:tabs},我只想要{}之间的数据它包含没有其他符号的文字。@Complexity我已经更新了答案,以显示如何在大括号和之间获取te内容,并跳过您不想要的内容。您使用的是什么语言?不同的正则表达式实现将导致不同的答案。我正在编写javascript正则表达式:-),这是因为
sed
很奇怪这个正则表达式。试试sed-r
,看看这个帮助sed当然不支持前瞻,但问题没有说任何关于sed
的内容。谢谢,这是我需要的。我会在我可以的时候接受(等待几分钟).什么是sed-r?我不认为sed-r
与这个答案有任何关系,甚至sed-r
也不支持前瞻。是的,我对此表示怀疑。sed
是一个命令行的东西,在这里你不需要担心。
{{(?!TMPL|[BE]OS|Render).*?}}