2017-09-08 9 views
0

나는 다음과 같은 의견을 정의하는 기존 언어 정의를 수정하기 위해 노력하고있어 :코멘트 안에 별표로 둘러싸인 것을 캡처하는 정규 표현식은 무엇입니까?

<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 

모든 아이디어 : 그래서, 나는 *에 둘러싸여되지 않은 코멘트에 모든 것을 식별하는 정규식, 같은 것을 사용하여 주위를 얻을 수 있다고 생각?

답변

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> 
+0

당신은 당신의 자신의 대답을 받아 들일 수 있습니다. :) https://stackoverflow.blog/2009/01/06/accept-your-own-answers/ – Gama11