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).*?}}