我有以下查詢:Mysql的正則表達式查找這兩個詞語在文
SELECT * `library` WHERE
(
UCASE( `text`) REGEXP '((^KEYWORD|[[.space.]]KEYWORD)([[.space.]]|[[.comma.]]|[[.period.]]|[[.colon.]]|[[.semicolon.]]|[[.apostrophe.]]|[[.quotation-mark.]]|[[.exclamation-mark.]]|[[.question-mark.]]))((^KEYWORD2|[[.space.]]KEYWORD2)([[.space.]]|[[.comma.]]|[[.period.]]|[[.colon.]]|[[.semicolon.]]|[[.apostrophe.]]|[[.quotation-mark.]]|[[.exclamation-mark.]]|[[.question-mark.]]))'
)
**編輯**
增加了一個SQL小提琴:
http://sqlfiddle.com/#!2/8f822/2/0
可讀格式此是:
SELECT * FROM `library` WHERE
(
UCASE( `text`) REGEXP '
(
(
^KEYWORD | [[.space.]]KEYWORD
)
(
[[.space.]] |
[[.comma.]] |
[[.period.]] |
[[.colon.]] |
[[.semicolon.]] |
[[.apostrophe.]] |
[[.quotation-mark.]] |
[[.exclamation-mark.]] |
[[.question-mark.]]
)
)
(
(
^KEYWORD2 | [[.space.]]KEYWORD2
)
(
[[.space.]] |
[[.comma.]] |
[[.period.]] |
[[.colon.]] |
[[.semicolon.]] |
[[.apostrophe.]] |
[[.quotation-mark.]] |
[[.exclamation-mark.]] |
[[.question-mark.]]
)
)
)'
現在我需要查詢來做下面的事情,我在這裏打磚牆。
如果關鍵字出現在文本中,開始文本或以空格開頭,然後是其中一個特殊字符,然後顯示結果。
這實際上並不像我需要的那樣工作,但我無法在文檔中找到如何在兩者都出現時進行匹配。例如試圖將字符串"keyword,"
,"keyword "
或"keyword;"
然後我需要匹配一個相同類型的查詢關鍵字2.
匹配,則關鍵字和關鍵字2需要兩個表達式是真實的,我只需要這些結果。
例如文本
A lazy brown fox jumped over the fence.
Then he found a chicken.
Then he ate the chicken and ran from the farmer.
和
A fox found a chicken.
Then he ate the chicken and ran from the farmer.
Then fox jumped over the fence.
應該來運算與他以下關鍵字fence
chicken
但這不應該符合以下文本
A lazy brown fox jumped over the fences.
Then he found a chicken.
Then he ate the chicken and ran from the farmer.
ANSWER
最後的查詢已經成爲
SELECT *
FROM`library`
WHERE
UCASE(`text`) REGEXP '(^|)FENCE[[.space.][.comma.][.period.][.colon.][.semicolon.][.apostrophe.][.quotation-mark.][.exclamation-mark.][.question-mark.]]'
AND
UCASE(`text`) REGEXP '(^|)CHICKEN[[.space.][.comma.][.period.][.colon.][.semicolon.][.apostrophe.][.quotation-mark.][.exclamation-mark.][.question-mark.]]'
,因爲正則表達式不支持隨機順序搜索,因爲我不希望做ň至數的電源關鍵字搜索字符串這是最好的解決方案。
感謝所有的觀看。
你能解釋一下請問你的正則表達式有什麼作用?從12年前我放棄了perl以來,正則表達式已經不是我的特長了... – Tschallacka
您的查詢很好用http://sqlfiddle.com/#!2/8f822/6/0但現在我想知道是否有可能在一個正則表達式中做這一切? – Tschallacka
可以製作一個正則表達式,但它會是一個醜陋的,比這個更不可讀。您將不得不考慮不同的情況:先關鍵字1然後關鍵字2或第一關鍵字2然後關鍵字1。我認爲這個解決方案更好。事實上,如你所寫,當你得到兩個以上的關鍵字時,它很快就會變得難以管理。 – lkuty