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


275

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

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

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

(?!<|>).*$

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

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

Ответы:


437
^[^<>]+$

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


3
Что означает первая карета? Будет ли это означать, что нет ничего, что не содержит эти символы ... означая только строки, которые содержат эти символы?
— RobKohr

11
Первая каретка означает начало строки. Доллар означает конец строки.
— Нед Бэтчелдер

2
@PhilipRego Будьте осторожны со специальными символами: оболочка интерпретирует некоторые из них. Посмотрите, есть ли у вас сейчас файл с именем '] + $' в вашем каталоге. Поместите все регулярные выражения в одинарные кавычки, чтобы заставить его работать.
— Нед

Отличный ответ! Не могли бы вы добавить объяснение, почему существует +и первая карета?
— Dr_Zaszuś

1
@ Dr_Zaszuś «+» означает «один или несколько», а «^» означает «начало строки».
— Нед

59

Ну вот:

^[^<>]*$

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.