Який регулярний вираз буде відповідати кожному символу, окрім коми ',' або крапки з комою ';'


344

Чи можна визначити регулярний вираз, який відповідає кожному символу, крім певного визначеного символу чи набору символів?

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

Відповіді:


473
[^,;]+         

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

[,;]+

10
І питання не вказує, чи дозволені суміжні роздільники, тому проміжок "+" є трохи сумнівним.
Джонатан Леффлер

Помилка лише для крапки з комою
невстановлене

У мене була схожа вимога, коли я хочу уникнути крапки з комою та комою в кінці, я намагався багато, але успіху внизу не є Regex, який я використовую 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] / г; Добре це підтверджує, якщо я використовую, і; посеред, але в кінці не вдається повернутися.
Гаррі

86

Використовуйте класи символів. Клас персонажів, що починається з карети, відповідатиме нічому, що не є в класі.

[^,;]


У мене була схожа вимога, коли я хочу уникнути крапки з комою та комою в кінці, я намагався багато, але успіху внизу не є Regex, який я використовую 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] / г; Добре це підтверджує, якщо я використовую, і; посеред, але в кінці не вдається повернутися.
Гаррі


2

Використовуй це:

([^,;]*[,;])*

5
Для цього потрібна кома або напівкрапка як роздільник поля, а не як роздільник поля. Різниця має значення в кінці 'рядка' (або іншої сканованої структури запису); як правило, ви не хочете наполягати на комах або крапці з двокрапкою після останнього поля. Якщо ваш механізм регулярних вивірок досить потужний, ви можете використовувати ' (?:([^,;]*)(?:[^,;]|$))' (PCRE з дужками, що не фіксують). Альтернативи коми чи напівкрапки після поля чи кінця запису покращують роботу. Також врахуйте, чи дозволяються порожні поля.
Джонатан Леффлер

1
Нарешті, ви повинні турбуватися про те, що насправді повертається захопленнями - чи дійсно ви хотіли, щоб роздільники включали, і якщо на рядку є 10 полів, скільки з них повертається нотацією захоплення.
Джонатан Леффлер

1
Ви з цим маєте рацію, але причиною того, що я не відповідав цим у своїй відповіді, є те, що я не знаю, на якій мові / бібліотеці RegEx питає запитувач. Він може використовувати "GREP". У будь-якому разі, я вдячний, що ви додали ці коментарі, щоб очистити його. : D
NawaMan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.