在评论中捕获星号包围的东西的正则表达式是什么?

时间:2017-09-08 19:10:03

标签: regex sublimetext2 sublimetext tmlanguage

我正在尝试修改定义如下注释的现有语言定义:

    <dict>
        <key>match</key>
        <string>(#) .*$\n?</string>
        <key>name</key>
        <string>comment.line.number-sign.myLanguage</string>
        <key>captures</key>
        <dict>
            <key>1</key>
            <dict>
                <key>name</key>
                <string>punctuation.definition.comment.myLanguage</string>
            </dict>
        </dict>
    </dict>

这可确保以#开头的行将被标识为注释并相应地突出显示。我想要做的是在星号中包含一个带注释的单词并将其显示为其他内容,例如keyword。但只是附加这个不起作用:

    <dict>
        <key>match</key>
        <string>\*([^*]+)\*</string>
        <key>captures</key>
        <dict>
            <key>1</key>
            <dict>
                <key>name</key>
                <string>keyword.myLanguage</string>
            </dict>
        </dict>
    </dict>

但是,如果该行不以#开头,它确实有效,所以我假设两个规则之间存在冲突。所以,我认为我可以通过使用正则表达式来解决它,该正则表达式标识未被*包围的注释中的所有内容,例如:

# This is a comment *this is something else* this is still a comment *not* yes

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,我让它上班了:

<dict>
  <key>begin</key>
  <string>(#) .*</string>
  <key>name</key>
  <string>comment.line.number-sign.myLanguage</string>
  <key>captures</key>
  <dict>
      <key>1</key>
      <dict>
          <key>name</key>
          <string>punctuation.definition.comment.myLanguage</string>
      </dict>
      <key>0</key>
      <dict>
          <key>patterns</key>
          <array>
            <dict>
              <key>name</key>
              <string>keyword.myLanguage</string>
              <key>match</key>
              <string>\*[^*]+\*</string>
            </dict>
          </array>
      </dict>
  </dict>
  <key>end</key>
  <string>$\n?</string>