如何找到连续两次重复的单词

时间:2010-06-22 14:16:24

标签: php mysql

例如,我在MySQL数据库表字段中有以下段落

“切断天文物体对象的照明,就像月球日食一样,当地球进入时”

此处单词“ object ”连续出现两次(彼此相邻)。

我想检查这种情况是否出现在同一个表中的其他记录中。有没有一种简单的方法可以使用PHP和MySQL

5 个答案:

答案 0 :(得分:1)

if (preg_match('/\\b(\\w+)\\s\\1\\b/', $subject)) {
    //has repetition
}

答案 1 :(得分:1)

此正则表达式有效:(\b\w+\b)(?=\s?\1)(请参阅example

要使其在MySQL中运行,Word Boundaries(\b)必须替换为MySQL等效[[:<:]][[:>:]]以及\w [[:alnum:]]

SELECT * FROM your_table
WHERE your_field REGEXP '([[:<:]][[:alnum:]]+[[:>:]])(?=\\s?\\1)';

但是这个查询给出了一个错误,因为正如Matt所说,MySQL does not support backreferences。因此,使用当前的MySQL REGEXP是不可能的。

答案 2 :(得分:0)

您可以将以下正则表达式用于您的目的:

(\b\w+)(?:\s+\1)+

\b(\w+)(?:\s+\1)+

这将匹配任意数量的重复单词,单词之间有任意数量的空格。

请注意,根据MySQL或PHP正则表达式引擎的工作方式(无论使用哪种方式),可能需要转义反斜杠(可能还有括号),并且您需要使用正则表达式引擎使用的任何分隔符对于模式。 (虽然如果MySQL不允许像Matt所说的反向引用,那么你只需要使用PHP。)

编辑:更新了字边界检查;没有意识到\w没有自动对preg模式进行单词边界检查。

答案 3 :(得分:-1)

SELECT * FROM table WHERE字段REGEXP'搜索词'

将返回包含相应术语的行。

答案 4 :(得分:-1)

怎么样

SELECT * FROM yourtable WHERE yourfield LIKE "%yourword%%yourword%"

在我在localhost上的快速测试用例中,它有效。