#mysql #regex
#mysql #регулярное выражение
Вопрос:
Я пытаюсь удалить все экземпляры «universiti», «university», «university of», «college» и «college of» в моем запросе, но «university of» и «college of» заменяют только первое слово, а не второе, т.е. «of».
Это то, что я пробовал
SELECT Name
, TRIM( REGEXP_REPLACE(Name, '(universiti|university|university\sof|college|college\sof)', '') ) AS re
FROM grid
Name |re |
--------------------------------------------------------------------- ---------------------------------------------------------------------
Australian National University |Australian National |
Monash University |Monash |
University of Queensland |of Queensland |
Macquarie University |Macquarie |
UNSW Sydney |UNSW Sydney |
Newcastle University |Newcastle |
University of Wollongong |of Wollongong |
University of Melbourne |of Melbourne |
University of Tasmania |of Tasmania |
University of Adelaide |of Adelaide |
James Cook University |James Cook |
University of Western Australia |of Western Australia |
University of Sydney |of Sydney |
Flinders University |Flinders |
Как я могу избавиться от «of» тоже?
Ответ №1:
Вы можете использовать
SELECT Name,
TRIM( REGEXP_REPLACE(Name, '\b(universit[yi]|college)(\s of\b\s*)?', '') ) AS re
FROM grid
Смотрите демонстрацию регулярных выражений. Подробные сведения:
b
— граница слова(universit[yi]|college)
—university
,universiti
,college
(s ofbs*)?
— необязательная последовательностьs
— один или несколько пробеловof
—of
словоb
— граница слова (так чтоof
это не может быть префиксом более длинного слова)s*
— ноль или более пробелов.
Тестирование с
create table grid (Name varchar(320));
insert into grid (Name) values ("University of Queensland");
insert into grid (Name) values ("Macquarie University");
insert into grid (Name) values ("UNSW Sydney");
вывод