所有以冒号结尾但不以破折号开头的行的Syn Match Regex表达式

问题描述

|| 我有以下格式的文件
Abc Task Header:

- task detail a

- task detail b


Def Task Header:

- task detail c:

    - task sub detail c1

    - task sub detail c2

- task detail d
我想让我的语法文件与以下行匹配(并突出显示): Abc任务标题: Def任务标题: 我不希望以下行匹配并突出显示: 任务详细信息c: 注意事项: 所有任务标头均以字母开头,并以冒号结尾。 除了上面列出的名称以外,任务标头没有任何一致的命名约定(因此名称中没有
Task Header
...这只是一个示例名称) 如果任务详细信息包含子任务详细信息,则可能以冒号结尾。 任务详细信息始终以
-
(破折号)字符开头。 任务详细信息不缩进。使用列表时,这是StackOverflow编辑器的副作用。 文件显示的所有项目符号实际上是“ 2”(破折号)。这也是StackOverflow编辑器的副作用。 我已经尝试了一些方法,但是它们似乎无法正常工作。 例如
syn match myTask \"[A-Z]*:$\"
这导致仅突出显示任务标题的最后一个单词以及冒号。它还突出显示了带有冒号的所有任务详细信息。
syn match myTask \"[^-].*[A-Z].*:$\"
这样会突出显示整个任务标题和冒号(不需要的行为),但是会突出显示包含冒号的所有任务详细信息。它不会突出显示破折号,但会突出显示其余部分。 有任何想法吗? 谢谢 更新: 好吧,比利·穆恩(Billy Moon)的例子很直接,涵盖了永远都是正确的一种情况。但是,还有其他一些答案也很有效(感谢YGomez)。我将在此基础上添加一些样本,或者从其他答案中汲取灵感后设法得到一些样本(以防将来有人在寻找解决类似问题的方法);
syn match myTask \"^[^-].*:$\"

syn match myTask \"[A-Z]*:$\"
syn match myTask \"^\\s*[A-Z].*:$\"

// These two are equivalent.
syn match myTask \"^\\s*[A-Za-Z].*:$\"
syn match myTask \"^\\s*\\c\\w.*:$\"
    

解决方法

        尝试这个:
syn match myTask \"^[^-].*:$\"
    ,        你可以试试:
syn match myTask \"^[A-Z].*:$\"
您说它们都是以字母开头的,所以与其检查它是否不是以
-
开头,还不如检查更强的条件以字母开头(在上述情况下为大写字母)。 编辑:更多可能的情况: 如果可以在其前面有空格:
syn match myTask \"^\\s*[A-Z].*:$\"
如果也可以是小写:
syn match myTask \"^\\s*[A-Za-z].*:$\"