字符串“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作为模式匹配的示例。我很欣赏正则表达式的澄清。
答案 0 :(得分:1)
正则表达式并不意味着匹配不精确的字符串(例如,拼写错误)。看起来这就是你想要做的事情。例如,可以使用正则表达式来匹配任何社会安全号码(三个数字后跟连字符后跟两个数字,后跟另一个连字符后跟四个数字)。但你无法使用正则表达式来匹配约翰的拼写错误。使用一些更高级的编码处理拼写错误,通常称为n-gram匹配(参见:http://en.wikipedia.org/wiki/N-gram)。如果您还使用Ruby-on-Rails,那么有一个很棒的Gem(称为Chrononaut-no_fuzz)来为您处理这个问题,但是对于普通的MySQL,您可能需要手动编写此功能。
答案 1 :(得分:0)
John Doe应该匹配的字符串是最后一个。你能否发布确切的sql和它试图匹配的数据
好的,所以你将字符串和模式混合在一起,为regexp提供了一个匹配字符串的模式。因此,例如John博士永远不会匹配John,因为模式试图匹配Dr并且失败。然而约翰将匹配约翰博士,因为现在这种模式在约翰博士中找到约翰。我给你的建议是阅读正则表达式入门书。