Regex - не содержит определенных символов

275

Мне нужно регулярное выражение для сопоставления, если где-либо в предложении нет или <или>.

Если в строке есть либо <, либо>, он должен вернуть false.

У меня был частичный успех с этим, но только если мои <> в начале или в конце:

(?!<|>).*$

Я использую .Net, если это имеет значение.

Спасибо за помощь.

SetiSeeker
источник

Ответы:

437
^[^<>]+$

Символ каретки в символьном классе ( [^) означает совпадение с чем угодно, но это означает, что начало строки, затем одно или несколько значений, кроме <и >, затем конец строки.

Нед Бэтчелдер
источник
3
Что означает первая карета? Будет ли это означать, что нет ничего, что не содержит эти символы ... означая только строки, которые содержат эти символы?
RobKohr
11
Первая каретка означает начало строки. Доллар означает конец строки.
Нед Бэтчелдер
2
@PhilipRego Будьте осторожны со специальными символами: оболочка интерпретирует некоторые из них. Посмотрите, есть ли у вас сейчас файл с именем '] + $' в вашем каталоге. Поместите все регулярные выражения в одинарные кавычки, чтобы заставить его работать.
Нед
Отличный ответ! Не могли бы вы добавить объяснение, почему существует +и первая карета?
Dr_Zaszuś
1
@ Dr_Zaszuś «+» означает «один или несколько», а «^» означает «начало строки».
Нед
59

Ну вот:

^[^<>]*$

Это проверит на строку, которая не имеет <и нет>

Если вы хотите проверить строку, которая может иметь <и >, но должна иметь что-то другое, вы должны использовать просто

[^<>] (or ^.*[^<>].*$)

Где [<>]означает любой из <или> и [^<>]означает любой, который не является <или> .

И конечно же обязательная ссылка .

Алин Пуркару
источник