{hola}

{   
    \defn{[34,\cite{Lint:1998:ICT:552386}]}                                                                                                                      
\[
    R\coloneqq n^{-1}\log_2|\code|                                                                                                                            
\]
is called the rate of $\code$                                                                                                                                 
}   

Мне нужно сопоставить все внутри строки "{
\defn {[34, \cite {Lint:1998:ICT:552386}]} "и последний символ}. Не могли бы вы мне помочь, пожалуйста?

Я пытаюсь это

{\n.*\\defn{\[\d\+,\s*\\cite{.\+}]}\_.\+\n}\}

но это не работает

1 ответ1

1

Этот вопрос, вероятно, следует перейти на сайт vi и vim...


У вашего регулярного выражения много проблем.

  1. После первого символа { есть пробел, поэтому часть {\n никогда не будет совпадать. Попробуйте удалить этот пробел или добавить \s*

  2. Вы, вероятно, не хотите использовать .\+ , Потому что это будет соответствовать больше, чем необходимо, вероятно, вызывая некоторые ложные срабатывания. Вы, вероятно, хотите .\{-} , потому что это некожадный квалификатор, а это значит, что он всегда будет соответствовать как можно меньшему количеству. Без этого вы будете сопоставлять строки, такие как

    \defn{[34,\cite{Lint:1998:ICT:552386 \\hello world \\here's a bunch of random crap you don't want to match ]}]} }]}
    
  3. Вы определенно не хотите использовать \_.\+ Потому что это будет соответствовать всему до конца файла. От :h \_.

                                */\_.*
    \_. Matches any single character or end-of-line.
        Careful: "\_.*" matches all text to the end of the buffer!
    

    Опять же, вам нужен не жадный квантификатор \_.\{-}

  4. Почему вы пытаетесь сопоставить 2 } символов в конце? Ваш текст ясно заканчивается только одним.

  5. Вам не нужно экранировать символ } .

Собирая все это вместе, попробуйте использовать это регулярное выражение:

{.*\n.*\\defn{\[\d\+,\s*\\cite{.\{-}}]}\_.\{-}\n}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .