gpt4 book ai didi

Mysql正则表达式在文本中找到两个词

转载 作者:行者123 更新时间:2023-11-29 00:40:24 25 4
gpt4 key购买 nike

我有以下查询:

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 fiddle :

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 匹配相同类型的查询。

然后 keyword 和 keyword2 的表达式都需要为真,我只需要这些结果。

例如文本

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.

回答

最终的查询变成了

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.]]'

因为正则表达式不支持随机顺序搜索,而且我不希望n 使用关键字搜索字符串的次数,这是最好的解决方案。

谢谢大家的收看。

最佳答案

您可以使用正则表达式 (^| )KEYWORD[- ,.:;'"!?] 并将两个 REGEXP 测试放在 WHERE 子句中并组合在一起。第一部分 ( ^| ) 是一个正则表达式,它允许我们匹配文本的开头或空格。接下来是必须按原样匹配的关键字,然后是 [] 之间的字符类类中的单个字符必须与之匹配。它就像单个字符的 OR 而不是完整正则表达式的 |

SELECT *
FROM`library`
WHERE
UCASE(`text` ) REGEXP '(^| )KEYWORD[- ,.:;''"!?]'
AND
UCASE(`text` ) REGEXP '(^| )KEYWORD2[- ,.:;''"!?]'

免责声明:我没有测试过 SQL 语句,我不记得字符串中的撇号是否必须加倍。

关于Mysql正则表达式在文本中找到两个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com