0

vimでは、正規表現を使用して、文字で終わる各行を強調表示したいと思い//ます:。私は次のことを試しました

syn match systemverilogNoSemi "\(.*\(//\|:\).*\)\@!\&.*[a-zA-Z0-9_]$" oneline

これはコメントではうまく機能しましたが、コロンを含む行では機能しませんでした。理由はありますか?

4

2 に答える 2

1

この正規表現を使用すると、vim は正規表現の一致を開始する任意のポイントを選択できるためです。//明らかに、最初の concat が一致するポイントを選択します (つまり、 orがありません:)。これらのことは、通常、次のいずれかを使用して行われます

\v^%(%(\/\/|\:)@!.)*\w$

(最初の concat とブランチ自体を削除し、 に変更.*しました%(%(\/\/|\:)@!.)*。コレクションを同等の に置き換えました\w行の先頭を指すアンカーを追加しました): 行全体を一致させる必要がある場合。または、最後の文字のみを照合する必要がある場合は、否定後読み。バリアントの最初の連結にアンカーを追加することもできます (.*最初の連結は役に立たないので末尾を削除し、同じ理由で分岐記号を削除する必要があります)。

注:正規表現がコメントに対して機能した理由がわかりません。私がチェックしたすべてのケースで、必要な方法でコメントを処理することはできません。

于 2013-02-20T21:01:50.387 に答える
0

これはあなたのために働きますか?

^\(\(//\|:\)\@<!.\)*[a-zA-Z0-9_]$
于 2013-02-20T21:08:55.243 に答える