Как я могу создать регулярное выражение, которое соответствует строке, содержащей слово из одного списка И не содержит слова из другого списка? - PullRequest
0 голосов
/ 24 мая 2018

Как я могу создать регулярное выражение, которое соответствует строке, содержащей слово из одного списка И не содержит слова из другого списка?

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

Пример:

Быстрая коричневая лиса перепрыгивает через ленивую собаку --- матч

Быстрая рыжая лиса перепрыгивает через ленивую собаку ---- нет матча

Быстрая коричневая львица перепрыгивает через ленивую кошку ---- матч

Быстрая черная кошка перепрыгивает через ленивую собакусобака ---- нет совпадений

Возможно ли это с Regex?

1 Ответ

0 голосов
/ 24 мая 2018

Попробуйте Regex: ^(?:(?!(red|black)).)*(?:fox|cat)(?:(?!(red|black)).)*$

Демо

Объяснение:

    Non-capturing group (?:(?!(red|black)).)* - Confirms red or black is not present before fox or cat
        Negative Lookahead (?!(red|black)) - Assert that the Regex below does not match
            1st Capturing Group (red|black)
                1st Alternative red - red matches the characters red literally (case sensitive)
                2nd Alternative black - black matches the characters black literally (case sensitive)
        . matches any character (except for line terminators)

    Non-capturing group (?:fox|cat) - confirms fox or cat is present
        1st Alternative fox - fox matches the characters fox literally (case sensitive)
        2nd Alternative cat - cat matches the characters cat literally (case sensitive)

Non-capturing group (?:(?!(red|black)).)* - Confirms red or black is not present after fox or cat
        Negative Lookahead (?!(red|black)) - Assert that the Regex below does not match
            1st Capturing Group (red|black)
                1st Alternative red - red matches the characters red literally (case sensitive)
                2nd Alternative black - black matches the characters black literally (case sensitive)
        . matches any character (except for line terminators)
...