8

カスタム言語用の .ctags ファイルを作成しています...ほとんどの言語と同様に、1 行で複数の変数宣言を行うことができます..つまり:

int a, b, c;

「a」を認識する基本的な正規表現があります。

--regex-mylang=/^[ \t]*int[ \t]*([a-zA-Z_0-9]+)/\1/v,variable/

これを「b」と「c」にも一致するように変更するにはどうすればよいですか? 1 行で複数の一致を処理する ctags ドキュメントには何も見つかりません。

4

5 に答える 5

2

これを数時間経験した後、私はそれができないと確信しています. いずれにせよ、正規表現は 1 行につき 1 つのタグにしか展開されません。\1 \2 \3 ... を展開として配置しても、一致ごとに 1 つのタグではなく、複数の一致で構成されるタグが発生するだけです。

ctags ソース コード内で正規表現ではなく実際のコード パーサーを使用するため、C の例を正しく解析します。

于 2013-01-27T15:22:03.100 に答える
0

通常は不可能な正規表現で解析しようとしています。解析には、スタックに情報を格納するのと同等の処理が必要ですが、正規表現は限られた数の異なる状態しか表現できません。

于 2012-09-07T18:04:31.030 に答える
-4
--regex-perl=/^\s*?use\s+(\w+[\w\:]*?\w*?)/\1/u,use,uses/
--regex-perl=/^\s*?require\s+(\w+[\w\:]*?\w*?)/\1/r,require,requires/
--regex-perl=/^\s*?has\s+['"]?(\w+)['"]?/\1/a,attribute,attributes/
--regex-perl=/^\s*?\*(\w+)\s*?=/\1/a,aliase,aliases/
--regex-perl=/->helper\(\s?['"]?(\w+)['"]?/\1/h,helper,helpers/
--regex-perl=/^\s*?our\s*?[\$@%](\w+)/\1/o,our,ours/
--regex-perl=/^=head1\s+(.+)/\1/p,pod,Plain Old Documentation/
--regex-perl=/^=head2\s+(.+)/-- \1/p,pod,Plain Old Documentation/
--regex-perl=/^=head[3-5]\s+(.+)/---- \1/p,pod,Plain Old Documentation/
于 2012-09-07T18:40:34.960 に答える