Отменить совпадение в синтаксисе RE2?

Как я могу написать регулярное выражение в RE2 для «совпадающих строк, не начинающихся с 4 или 5»?

В PCRE я бы использовал ^(?!4), но RE2 не поддерживает этот синтаксис.


person Richard    schedule 28.01.2015    source источник
comment
Вы можете использовать ^[^45], но он будет потреблять символ.   -  person Lucas Trzesniewski    schedule 28.01.2015


Ответы (2)


Вы можете использовать это регулярное выражение:

^[^45]

^ соответствует началу, а [^45] соответствует чему угодно, кроме 4 или 5 в начале.

person anubhava    schedule 28.01.2015
comment
И если вы также хотите сопоставить пустую строку, используйте ^(?:[^45]|$). - person Tim Pietzcker; 28.01.2015
comment
Да, верно, спасибо за добавление этого важного дополнения @TimPietzcker - person anubhava; 28.01.2015
comment
аналогично этому, как опустить слово, если оно содержит -ed в нем? любая идея для этой ссылки. Здесь 2 случая совпадения работают нормально, но условие на отрицание (не соответствующий случай), похоже, не работает. Пожалуйста, поправьте меня, если я ошибаюсь. @анубхава - person CdVr; 25.07.2020

У меня тоже такая проблема, но я ищу строки слов, а не отдельные символы.

Я делаю это дважды.

Сначала найдите все совпадающие элементы, а затем отфильтруйте их, чтобы получить окончательный ответ.

пример

  • тестовые данные
    aaabaraaa
    aaafooaaa
    aaazooaaa
    aaaqooaaa
    
    предположим, что я хочу найти центральный текст (между aaa), и он не должен быть bar или foo

это легко с PCRE1 =› https://regex101.com/r/nJcbt1/1/

используйте re2 Я выберу разделяй и властвуй: в уменьшенном масштабе с группой, а затем фильтрую.

решение, написанное с помощью Golang =› Go Playground


[1] PCRE: Perl-совместимые регулярные выражения

person Carson    schedule 22.04.2021