найти строки, не содержащие двойной косой черты в поиске регулярных выражений / затмений - PullRequest
1 голос
/ 01 июля 2019

при поиске в затмении только некомментированных строк, содержащих 'foo', я также получаю закомментированные строки.

Не найдено:

    // foo 
    // foobar
        // foo 
     // foobar
    // // foobar
     bar // foobar

Найдено:

     foo 
    / foobar
       bar foo 
     foobar

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

    ^.*(?!//).*foo.*$
    ^.*(?<!\/\/).*foo.*$

Есть ли работающее регулярное выражение длясопоставить эти строки?

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Вы можете использовать

^([^/\n]*(?:/(?!/)[^/\n]*)*?foo.*)

и заменить на //\1.Смотрите regex demo .

Это в основном тот же шаблон ( demo ), что и

^((?:(?!//).)*?foo.*)

, но развернут для лучшей производительности.

Посмотрите, как работают эти шаблоны:

  • ^((?:(?!//).)*?foo.*) соответствует началу строки с ^, затем любому символу, кроме символа перевода строки (.), который не запускает последовательность символов // ((?!//))) повторяется 0 или более раз, но как можно меньше раз (из-за *?), затем совпадает с foo и .* совпадает с остальной частью строки
  • ^([^/\n]*(?:/(?!/)[^/\n]*)*?foo.*) также совпадает с началомстроки [^/\n]* соответствует 0 или более символам, отличным от / и новой строки (с [^/\n]*, чтобы остаться на той же строке), а затем (?:/(?!/)[^/\n]*)*? соответствует 0 или более повторениям последовательности / не сопровождается другим / (см. /(?!/)) и затем 0 или более символами, отличными от / и символом новой строки, затем foo, а остальная часть строки соответствует foo.*.
0 голосов
/ 01 июля 2019

Совет Casimir et Hippolyte прекрасно работает:

    ^(?:(?!//).)*?foo.* 

для замены в eclipse (то есть для установки строки в качестве комментария) Я использую поиск

    search  : (^(?:(?!//).)*?foo.*)
    replace : //\1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...