首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL REGEXP无法限制出现次数(?!)

问MySQL REGEXP无法限制出现次数(?!)
EN

Stack Overflow用户
提问于 2018-06-11 08:36:55
回答 1查看 224关注 0票数 1

我有一个表格,里面有很多单独的单词(列名为'qWord'),内容包括‘实用’,‘说’,‘独角兽’和‘实用’。

我正在尝试执行SELECT来查找最多有一个字母't‘实例的qWord字符串。

使用REGEXP时,我认为这是一个微不足道的语句,比如:

代码语言:javascript
复制
SELECT * 
  FROM entries.qentries 
 WHERE (qWord REGEXP 'T{0,1}')  

但是我仍然在输出中得到'Utter‘和'Utility’--以及'Utile‘和'Unicorn’。

那么我在这里错过了什么呢?

(参考资料: MySQL 8.0.11,在Windows8.1机器上运行的社区版)

这里是完整的REGEXP和我的道歉,因为我没有张贴它最初。我正在寻找仅由特定字母组成的单词,这部分工作正常。

但我也会用有限数量的给定字母的单词,比如t

代码语言:javascript
复制
SELECT * FROM entries.entries WHERE 
(qWord NOT REGEXP 'C|F|G|I|J|K|P|Q|S|V|W|X|Y|Z|-') 
AND (qWord REGEXP 'A|B|D|E|H|L|M|N|O|R|T|U') 
AND (qWord REGEXP 't{0,1}') ; 

我也尝试过(qWord REGEXP '(?<=[^t]|^)(t{0}|t{1})(?:[^t]|$)' )和(qWord REGEXP 't{0}|t{1}')

没有成功,所以我仍然卡住了

EN

回答 1

Stack Overflow用户

发布于 2018-06-11 08:53:38

您可以使用以下正则表达式:

代码语言:javascript
复制
SELECT * 
  FROM entries.qentries 
 WHERE (qWord REGEXP '^[^tT]*[tT]?[^tT]*$')

说明:

  • ^,match)
  • [^tT]*起始和结束锚点(这是为了避免word times
  • [tT]? {0,1})
  • [^tT]*任何不是代码或代码0或更多的字符而需要的)最多出现一次$或t ( T等同于t或T不是t或T的任何字符0或更多次

<T>F225t>

补充说明:

[^tT]此字符范围将接受除t或T以外的任何字符(空格、.、\n和其他字符也将被接受,如果您想只接受字母并排除您可以使用的t,T,则可以限制此范围:[a-su-zA-SU-Z],如果您想向此类添加其他字符,只需将它们添加到类的末尾[a-su-zA-SU-Z -]将还接受包含空格和-的单词。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50789246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档