2015-02-17 2 views
0

Я хотел бы сделать следующую операцию замены в Sublime Text (использует Perl Regular Expression Syntax).Perl Regular Expression Синтаксис из библиотеки Boost

I would loe [BACKSPACE][BACKSPACE]ve to play with you

должен стать

I would love to play with you

Таким образом, для каждого [BACKSPACE] Я хочу, чтобы удалить один [BACKSPACE] и один символ перед ним.

Там проблема: возможно, они будут interract друг с другом:

I would loe [BACKSPACE][BACKSPACE]ve to play with you

станет

I would loe [BACKSPACEve to play with you

, если мы используем .\[BACKSPACE\] регулярное выражение. Я предполагаю, что это будет работать, поскольку нормальное кодирование является последовательным и идет строчно.

Как написать такое регулярное выражение?

+1

не мог понять вас. вам нужно научиться сначала спрашивать. – HuStmpHrrr

+0

Что общего с вопросом имеет тег 'boost'? –

+0

Я не понимаю, почему вы не могли понять мою просьбу, когда я даже дал ясный пример HuStmpHrrr. Также тег boost связан с библиотекой boost, которая необходима, потому что, если выражение находится в любой другой библиотеке, я не могу ее использовать. –

ответ

0

Эта задача по существу нуждается в подсчете. a n b n язык is not regular, и это тот, который вам нужен здесь. Итак, по крайней мере с теоретической точки зрения, регулярные выражения не могут вам помочь.

Но на практике теория отличается от практики.

  1. Вы можете просто заменить .(?<!\[BACKSPACE\])\[BACKSPACE\] пустой строкой несколько раз над документом, пока он не изменит ваш документ. (Это negative lookbehind.)
  2. Реальные двигатели регулярных выражений имеют некоторые метасимволы, которые не являются регулярными, например. обратные_связи. Вероятно, есть способ их использования.
  3. Вы всегда можете смешивать регулярные выражения с обычным кодом или просто писать простой код. Эта задача не так сложна.

Поскольку вы используете Sublime, вас может заинтересовать его scripting API.

Что касается знаний о регулярных выражениях, попробуйте прочитать J. Friedl's Регулярные выражения book. Он имеет широкий и последовательный охват темы.