0

このページ

REGEXP を使用してパターン マッチングを行う素晴らしい例があります。REGEXP の問題は、次の文字列と一致しません。

  • 「ミスター・ジョン」
  • 「ジョン博士」
    またはさらに:
  • 「ミスター・ジョン・ドウ」

文字列「John Doe」で

与えられた例のいずれかに肯定的な一致を得るにはどうすればよいですか?

サンプルコードは次のとおりです。


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';

-ありがとうございました

更新: 回答ありがとうございます。質問は、正規表現を使用して必要なマッチングを行う方法ではなく、REGEXP に関係なくどのように行うことができるかということです。パターン マッチングの例として REGEXP を使用します。正規表現の明確化に感謝します。

4

2 に答える 2

1

正規表現は、不正確な文字列 (スペル ミスなど) と一致することを意図していません。それがあなたがやろうとしていることのようです。たとえば、正規表現を使用して、任意の社会保障番号 (3 桁の後にハイフン、2 桁、さらに別のハイフン、4 桁が続く) に一致させることができます。しかし、正規表現を使用して John のスペルミスを照合することはできませんでした。スペルミスは、通常は n-gram マッチングと呼ばれる、より洗練されたコーディングを使用して処理されます ( http://en.wikipedia.org/wiki/N-gramを参照)。Ruby-on-Rails も使用している場合は、これを処理する優れた Gem (Chrononaut-no_fuzz と呼ばれる) がありますが、プレーンな MySQL では、この機能を手作業でコーディングする必要がある場合があります。

于 2009-11-11T19:14:28.437 に答える
0

John Doe が一致する文字列は最後の文字列です。正確なSQLと一致させようとしているデータを投稿してください

さて、文字列とパターンが混同されているので、文字列に一致させるために正規表現にパターンを指定します。たとえば、パターンが Dr と一致しようとして失敗するため、Dr. John は決して John と一致しません。ただし、John は Dr John と一致します。これは、パターンが Dr John 内で John を見つけるためです。正規表現の入門書を読むことをお勧めします。

于 2009-11-11T18:34:49.817 に答える