Как сделать RegEx, чтобы выбрать все указанные c символы каждой строки, начиная с указанной c строки - PullRequest
0 голосов
/ 07 августа 2020

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

Чтобы сделать проект, написанный на C, который использует Windows обратную косую черту в относительных путях файловых включений, совместимых со стандартами Unix, я хотел бы иметь возможность заменить их все обычным sla sh. Таким образом,

#include <abc\def\ghi>
#include <jkl\mno\pqr>
#define  NEWLINE "\n"

превратится в

#include <abc/def/ghi>
#include <jkl/mno/pqr>
#define  NEWLINE "\n"

Для этого в Visual Studio Code есть функция поиска по регулярным выражениям. Поэтому я попытался найти способ выбора express backsla sh через RegEx, но я не могу этого сделать. Мой трек следующий:

^(#include(Do something here to match '\')*)$

Но я не знаю, как сделать backsla sh selection ...

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

Ответы [ 3 ]

1 голос
/ 07 августа 2020

При поиске в файле (не будет работать для нескольких файлов из-за нефиксированной длины ретроспективного просмотра, но отлично работает при поиске в файле):

(?<=^#include.*)(\\) получает все \ в строке #include

Замените все такие \ на /

/

Вот и все.

1 голос
/ 07 августа 2020

Вы можете заменить совпадения следующего регулярного выражения на прямой sla sh.

(?<=^#include +<[^>\\]+(?:\\[^>\\]+)*)\\(?=[^<]+>)

Demo (Нажмите «Контекст», чтобы увидеть замены.)

Механизм регулярных выражений выполняет следующие операции:

(?<=             : begin positive lookbehind
  ^              : assert beginning of string
  #include +<    : match '#include', 1+ spaces, '<'
  [^>\\]+        : match 1+ chars other than '>' and '\'  
  (?:\\[^>\\]+)  : match '\' followed by 1+ chars other than '>' and '\'
                   in a non-capture group 
  *              : executed the above non-capture group 0+ times
)                : end positive lookbehind
\\               : match '\'
(?=[^<]+>)       : positive lookahead asserts that match is followed by 1+
                 : chars other than '<' followed by '>'

Обратите внимание, что положительный просмотр назад - это переменная длина . Механизм регулярных выражений. NET - один из немногих, который поддерживает поисковые запросы переменной длины, что является одной из его сильных сторон.

1 голос
/ 07 августа 2020

Найти

^(#include [^\\]+)\\(.*)$

Заменить

$1/$2

Применять столько раз, сколько необходимо.

Пример: https://regex101.com/r/t48Kn4/1

...