2016-09-20 4 views
1

私のラテックスファイルからすべてのインデックスを抽出する必要があります。しかし、いくつかのインデックスは、インデックス\このgrepと有効な括弧のシーケンス

のように見えるかもしれ{* 3 * SQRT * uppersqrt {\ {HSPACE -2.5pt} $ \ uppersqrt {\; \; \;} $(上位 平方根)}}

私は何とか現在開いている中括弧の正規表現の数を数える必要があります。私はそのような事件をどのように処理するのか分かりません。

また、インデックスに/が含まれている場合は、このようなインデックスは必要ありません。

例:

Anything before. \index{{}{}}\index{Hi}\anothertag{something} 
\index{}{} 
\index{/} 

期待される結果を開くことができるブラケットの限られた数があり

\index{{}{}} 
\index{Hi} 
\index{} 
+0

はあなたのためではない貪欲ドットに動作しますか? '\\ index {。*}' – revo

+0

@revoそれはいくつかのインデックスを合わせることができると思います – Yola

+0

インデックスとは何ですか? – revo

答えて

0

正規表現:

\\index({(?(?!{|})[^\/{}]*|(?1))*}) 

Live demo

説明:

\\index    # Match `\index` literally 
(     # Start of capturing group (1) 
    {     # Match opening brace `{` 
    (?     # Start of conditional statement 
     (?!{|})    # If very next immediate character is not `{` or `}` 
     [^\/{}]*   # Anything except these characters 
     |     # Else 
     (?1)    # Recurs capturing group (1) 
    )*     # End of conditional - repeat conditional zero or more times - greedily. 
    }     # Match closing brace `}` 
)     # End of capturing group (1) 

使用法:

grep -Po "\\index({(?(?!{|})[^\/{}]*|(?1))*})" input_file.txt 

出力OPによって提供される入力に基づいて:最初のケースでは

\index{{}{}} 
\index{Hi} 
\index{} 
+0

この '\ index {{} {{} {{{{{}}}}} {}}}'はどうでしょうか? – Yola

+0

何が期待されますか? – revo

+0

私はそれが有効なシーケンスであり、一致しなければならないと思います。参考までに、あなたが情報が役に立ちましたので、私は投票しました。 – Yola

0

のですか? 正規表現

\\index{(?:[^{]|(?:{(?:[^{]|(?:{[^{]*}))*}))*} 

3つのブラケットのmaxに一致する深い、等:インデックス\ {{{}}、{{}}}