MySQL строка соответствует нескольким словам - PullRequest
0 голосов
/ 11 ноября 2009

На этой странице

есть отличный пример использования REGEXP для сопоставления с образцом. проблема с REGEXP не будет соответствовать следующим строкам:

  • "Мистер Джон"
  • "Доктор Джон"
    или даже:
  • "Мистер Джон Доу"

со строкой "Джон Доу"

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

Вот пример кода:


Drop table Names;

CREATE TABLE Names (
    first_name VARCHAR(20), 
    last_name  VARCHAR(20)

);

INSERT INTO  Names VALUES ('John','Doe');
INSERT INTO  Names VALUES ('Sue','Yin');
INSERT INTO  Names VALUES ('Diego James', 'Franco');

select * from Names;

/*To find names containing a string */
/*I want this to march John Doe*/
SELECT * FROM Names WHERE first_name REGEXP 'Mr John';
/*This has John misspelled, I want it to match John Doe */
SELECT * FROM Names WHERE first_name REGEXP 'Hohn' AND last_name REGEXP 'Doe';
/*And this would match Diego James Franco*/
SELECT * FROM Names WHERE first_name REGEXP 'Dr Diego' AND last_name REGEXP 'Franco';

-Спасибо

UPDATE: Спасибо за ответы, вопрос не в том, как использовать регулярное выражение для сопоставления, которое я хочу, а в том, как я могу это сделать независимо от REGEXP. Я использую REGEXP в качестве примера сопоставления с образцом. Я ценю разъяснения по регулярным выражениям.

Ответы [ 2 ]

1 голос
/ 11 ноября 2009

Регулярные выражения не предназначены для соответствия неточным строкам (например, орфографическая ошибка). Похоже, это то, что вы пытаетесь сделать. Регулярное выражение можно использовать, например, для сопоставления с любым номером социального страхования (три цифры, за которыми следует дефис, за которыми следуют две цифры, за которыми следует еще один дефис, за которым следуют четыре цифры). Но вы не могли использовать регулярное выражение, чтобы соответствовать орфографическим ошибкам Джона. Ошибочные орфографии обрабатываются с помощью некоторого причудливого кодирования, обычно называемого соответствием n-грамм (см .: http://en.wikipedia.org/wiki/N-gram).. Если вы также используете Ruby-on-Rails, есть отличный Gem (называемый Chrononaut-no_fuzz), чтобы справиться с этим , но с простым MySQL вам, возможно, придется кодировать эту функцию вручную.

0 голосов
/ 11 ноября 2009

строка, которой должен соответствовать Джон Доу, является последней. Можете ли вы опубликовать точный sql и данные, которые он пытается сопоставить

Хорошо, значит, вы перепутали строку и шаблон, и вы предоставляете шаблон для регулярного выражения, предназначенный для соответствия строке. Так, например, доктор Джон никогда не будет соответствовать Джону, поскольку шаблон пытается соответствовать доктору и терпит неудачу. Тем не менее, Джон будет соответствовать доктору Джону, поскольку теперь образец находится в докторе Джоне. Я предлагаю вам прочитать учебник по регулярным выражениям.

...