我有一个数据库(mysql)文本字段,包含不同的数据:
data1-单个数字,用逗号分隔:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15…n(其中n可以是任何正整数)
数据2-文本,用逗号分隔:lorem ipsum、dolor、sit amet、Concetetur、Adipising、elit、ut et、sollicitudin、enim、vel、Concetetur lacus
数据中不允许使用起始和结束逗号,空格可以位于逗号的前面和/或开头,也可以位于逗号的后面,例如2、3、4、5、6、7或lorem ipsum、dolor、sit amet等。这些空格现在可以在匹配中计算。
我需要用几种不同的方法来搜索这些数据,所以我需要regexp模式用于搜索:
模式a:匹配数据1中的数字。如果我搜索1,结果是,我只需要1,而不是11,12,等等。,
现在我有: [0-9]+(,[0-9]+)*
模式b:匹配一系列数字:如果字段包含两个给定数字之间的数字(至少一个)。
模式c:匹配数据2中由COMA分隔的完整字符串之一。比如:如果我搜索sit,我没有结果,但是如果我搜索sit amet,我得到结果。
有人能帮我拿这些吗?我为模式a准备的是最好的方法吗?如何匹配范围(模式b)和逗号分隔的字符串(模式c)?
2条答案
按热度按时间fcg9iug31#
你不需要正则表达式。
我将向您展示一个技巧,使用mysql数字生成器和嵌套的子字符串索引函数相结合。
如果您需要支持更多csv,请添加一个新的
查询
此查询将生成从1到100的数字。因此,最终的查询最多可以支持100个分隔的值。
请参见演示http://sqlfiddle.com/#!9/c314ca/5型
现在我们将从逗号分隔的字符串中提取值
查询
将[position]替换为0-。。。要从逗号分隔的字符串中提取的值。
或者
请参见演示http://sqlfiddle.com/#!9/c314ca/16型
现在我们知道了将这两个查询组合到一个工作解决方案的基础知识。
此查询将所有逗号分隔的值转换为记录。
因为我不知道我的table结构á我想大概是
查询
请参见演示http://sqlfiddle.com/#!9/a19fc5/6型
我们把它分成几个小部分。
模式a:匹配数据1中的数字。如果我搜索1,结果是,我只需要1,而不是11,12,等等。,
因为我们现在有记录而不是逗号分隔的值,所以我们可以简单地使用最后一个查询作为传递表来添加where子句。
请参见演示http://sqlfiddle.com/#!9/a19fc5/10号
模式b:匹配一系列数字:如果字段包含两个给定数字之间的数字(至少一个)。
where子句是一个简单的between子句
请参见演示http://sqlfiddle.com/#!2011年9月19日
模式c:匹配数据2中由COMA分隔的完整字符串之一。比如:如果我搜索sit,我没有结果,但是如果我搜索sit amet,我得到结果。
现在你可以用
请参见演示http://sqlfiddle.com/#!2014年9月19日
ttp71kqs2#
模式a:在commalist中搜索数字:
或
这将检查“1”是否被“单词边界”包围。
模式b:不容易。
模式c:
这会加上逗号,然后检查单词是否有空格包围,然后一定要加逗号。