簡體   English   中英

如何找到連續兩次重復的單詞

[英]How to find if there are words repeated twice in a row

例如,我在MySQL數據庫表字段中有以下段落

“切斷天文物體的照射,就像在月球的日食中,當地球進入時”

這里“ 對象 ”這個詞連續出現兩次(彼此相鄰)。

我想檢查這種情況是否出現在同一個表中的其他記錄中。 使用PHP和MySQL有一種簡單的方法嗎?

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

這個正則表達式有效: (\\b\\w+\\b)(?=\\s?\\1) (參見示例

為了使它在MySQL中工作,Word Boundaries( \\b )必須用MySQL等效[[:<:]][[:>:]]替換,而\\w[[:alnum:]]

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

但是這個查詢給出了一個錯誤,因為正如Matt所說,MySQL 不支持反向引用 因此,使用當前的MySQL REGEXP是不可能的。

您可以將以下正則表達式用於以下目的:

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

要么

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

這將匹配任意數量的重復單詞,單詞之間有任意數量的空格。

請注意,根據MySQL或PHP正則表達式引擎的工作方式(無論使用哪種方式),反斜杠(可能還有括號)可能需要進行轉義,並且您需要使用正則表達式引擎用於模式的任何分隔符。 (雖然如果MySQL不允許像Matt所說的反向引用,那么你只需要使用PHP。)

編輯:更新了字邊界檢查; 沒有意識到\\w不會自動對preg模式進行單詞邊界檢查。

SELECT * FROM表WHERE字段REGEXP'搜索詞'

將返回包含適當術語的行。

關於什么

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

在我對localhost的快速測試用例中,它有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM