Regex: Как получить все строки, содержащие Стру, но не strB в Visual Studio

Принятие Вас имеет объект "конфигурации", который Вы стремитесь устанавливать с флагами и подходящим синтаксическим анализатором командной строки, который заботится о парсинге командной строки, и предоставьте постоянный поток опций, здесь идет блок псевдокода

while (current_argument = cli_parser_next()) {
    switch(current_argument) {
        case "f": //Parser strips the dashes
        case "force":
            config->force = true;
            break;
        case "d":
        case "delete":
            config->delete = true;
            break;
        //So on and so forth
        default:
            printUsage();
            exit;
    }
}
19
задан Alan Moore 6 February 2010 в 12:13
поделиться

4 ответа

Для Visual Studio 2012 (и более новых версий):

^(?!.*strB).*strA.*$

Объяснение:

^           # Anchor the search at the start of the line
(?!.*strB)  # Make sure that strB isn't on the current line
.*strA.*    # Match the entire line if it contains strA
$           # Anchor the search to the end of the line

Вы можете добавить (?: \ R \ n)? в конец регулярного выражения, если вы также хотите удалить символы возврата каретки / перевода строки вместе с остальной частью строки.

35
ответ дан 30 November 2019 в 02:24
поделиться

Вы бы использовали Отрицательные поисковые пути , но выражение будет очень сложным, если вы не знаете ожидаемую позицию (или даже порядок) терминов. Знаете ли порядок или шаблон?

В противном случае я бы посоветовал вам использовать другой инструмент, который с такой же легкостью мог бы циклически перемещаться (или составлять список) по файлу построчно и выполнять inStr или Contains или другие простые, более быстрые , логические тесты ...

1
ответ дан 30 November 2019 в 02:24
поделиться

Я предполагаю, что поле поиска действительно принимает обычные регулярные выражения. Использование отрицательного просмотра вперед:

(?!^.*strB.*$)strA

Вам нужно будет установить параметры многострочного ( ^ и $ совпадают в начале / конце строк). Если вы не можете установить его с помощью параметров диалогового окна, попробуйте:

(?m)(?!^.*strB.*$)strA

Вероятно, это режим по умолчанию в этом движке.

1
ответ дан 30 November 2019 в 02:24
поделиться

Для Visual Studio 2010 (и предыдущих версий):

Поле поиска Visual Studio имеет собственную причудливую версию синтаксиса регулярных выражений. Это выражение работает так, как было запрошено:

^~(.*strB).*strA

^ соответствует началу строки. (Обычно для текстового редактора нет опции «многострочный»; ^ и $ всегда совпадают на границах строк.)

. соответствует любому символу, кроме новой строки. (В некоторых случаях не существует режима «однострочный» или «все точки», который позволяет точкам сопоставлять символы новой строки.)

~ (...) - конструкция «предотвращения совпадения», эквивалентная (насколько я могу судить) на отрицательный прогноз ( (?! ...) ), используемый другими респондентами.

18
ответ дан 30 November 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: