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

206

Можно ли определить регулярное выражение, которое будет соответствовать любому символу, кроме определенного определенного символа или набора символов?

В принципе, я хотел разбить строку запятой (,) или точкой с запятой (;). Поэтому я думал сделать это с регулярным выражением, которое соответствовало бы всем, пока не столкнулось с запятой или точкой с запятой.

Теги:

4 ответа

281
Лучший ответ
[^,;]+         

Вы не указали используемую вами реализацию регулярного выражения. Большинство из них имеют метод Split, который принимает разделители и разделяет их. Возможно, вы захотите использовать этот класс с "нормальным" (без ^) символьным классом:

[,;]+
  • 6
    И вопрос не указывает, разрешены ли соседние разделители, поэтому конечный знак «+» немного сомнителен.
  • 0
    Получение ошибки только для точки с запятой - неопределенное регулярное выражение встречает конец файла
Показать ещё 1 комментарий
50

Использовать классы символов. Класс символов, начинающийся с каретки, будет соответствовать чему-либо не в классе.

[^,;]
  • 2
    Подробнее о отрицательных классах персонажей
  • 0
    У меня было такое же требование, когда я хотел избежать точки с запятой и запятой в конце, я много пробовал, но ниже не удается получить регулярное выражение, которое я использую const regexDomain = / ^ (?: [A-Za-z0-9] (?: [A-Za-z0-9 -] {0,61} [A-Za-z0-9]) \) + [A-Za-z0-9] [A-Za-z0-9 -]?. { 0,61} [A-Za-z0-9] / г; Ну, это подтверждает, если я использую, и; между, но не в конце, чтобы vliadate.
26

используйте класс отрицательных символов:

[^,;]+
2

Используйте это:

([^,;]*[,;])*
  • 4
    Для этого требуется запятая или точка с запятой в качестве разделителя полей, а не в качестве разделителя полей. Разница имеет значение в конце «строки» (или другой структуры отсканированной записи); как правило, вы не хотите настаивать на запятой или точке с запятой после последнего поля. Если ваш движок регулярных выражений достаточно мощный, вы можете использовать ' (?:([^,;]*)(?:[^,;]|$)) ' (PCRE с не захватывающими скобками). Варианты запятой или точки с запятой после поля или конца записи, заставляют вещи работать лучше. Также подумайте, разрешены ли пустые поля.
  • 1
    Наконец, вам нужно беспокоиться о том, что на самом деле возвращают записи - действительно ли вы хотите, чтобы разделители были включены, и если в строке 10 полей, сколько из них будет возвращено в записи записи.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню