Проблема с заменой регулярных выражений в Visual Studio 2003 - PullRequest
1 голос
/ 25 июня 2009

Я нахожусь в процессе преобразования некоторой документации LaTeX в реструктурированный текст и у меня возникают проблемы с регулярным выражением в Visual Studio 2003. Я пытаюсь преобразовать \ emph {текст} в * текст *, используя следующую команду find / заменить строки:

\\emph\{([^\}]*)\} 

*\0*

Однако, используя эту пару, я преобразую \ emph {текст} в * \ emph {текст} *, что оказалось не тем, что я ожидал. Когда я использую * \ 1 * вместо * \ 0 *, я получаю ** в качестве результата замены.

Чего мне не хватает или чего я не понимаю в правилах группировки?

Спасибо.

1 Ответ

3 голосов
/ 25 июня 2009

Я думаю, что в синтаксисе замены регулярного выражения VS \ 0 - это вся совпадающая строка, а \ 1 - содержимое первой захваченной переменной (\ 2 - вторая и т. Д.). Поэтому:

\ 0

Однако, используя эту пару, я получаю \ emph {текст} преобразован в * \ emph {текст} * это было не то, что я ожидал.

Таким образом, подтверждая, \ 0 - это вся совпадающая строка.

Когда я использую * \ 1 * вместо * \ 0 *, я получаю ** в качестве результата замены.

Возможно, вы не соответствуете чему-либо в классе захвата.

Чтобы добавить больше деталей, синтаксис для определения класса захвата (называемого теговым выражением в документах ) использует фигурные скобки {}, а не круглые скобки (), как вы используете здесь. Вероятно, это будет работать как выражение "найти":

\\emph\{{[^\}]*}\} 
...