当前位置: 首页>数据库>正文

wireshark 正则表达式过滤info接口 正则表达式过滤数据

这篇文章主要介绍了MYSQL使用正则表达式过滤数据的相关资料,感兴趣的小伙伴们可以参考一下

一、正则与LIKE的区别
 Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。
例如:select * from wp_posts where post_name REGEXP'hello',可以检索出列post_name中所有包含hello的行

REGEXP'.og' .是正则表达式中里一个特殊的字符。它表示匹配一个字符,因此,dog,hog,mog等等都能匹配。

注意:

关于LIKE和REGEXP的区别:LIKE匹配整个列。如果被匹配的文本仅在列值中出现,LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外)。而REGEXP在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)。

关于大小写的区分:MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写。如果要区分大小写,应该使用BINARY关键字,如where post_name REGEXP BINARY 'Hello.000'

二、基本字符匹配
检索列prod_name 包含文本1000的所有行:

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_组合查询,第1张

进行OR匹配相当于:或操作 “|”

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_组合查询_02,第2张

匹配几个字符之一只想匹配特定的字符。 可以通过指定一组用[]括起来的字符来完成。

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_thinkphp_03,第3张

[456]定义了一组字符,他的意思是匹配4或5或6. []是另一种形式的OR语句。[456][4|5|6]的缩写。匹配范围
[1-3] a-z都是合法的范围

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_打印sql语句_04,第4张

匹配特殊字符

正则表达式语言由特殊含义的特殊字符构成。

. 在正则表达式中表示匹配任何一个字符

比如匹配prod_name中包括on字符串的行:

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_thinkphp_05,第5张

那如何匹配.,[],|,-

为了匹配特殊字符,必须用\为前导。 比如\.表示查找·

匹配字符类

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_组合查询_06,第6张

匹配多个实例

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_thinkphp_07,第7张

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_正则表达式_08,第8张

再比如 匹配连在一起的4位数字

sticks? : s后的使s可选,因为匹配它前面紧跟的任何字符的0次或者1次出现。

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_组合查询_09,第9张

[:digit:]匹配任意数字,因而它为数字的一个集合。{4}确切地要求它前面的字符出现4次。
所以[:digit:]{4}匹配连在一起的任意4位数字。

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_thinkphp_10,第10张

三、定位符
目前为止所有例子都是匹配一个串中任意为止的文本。为了匹配特定为止的文本,需要使用定位符。

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_mysql_11,第11张

wireshark 正则表达式过滤info接口 正则表达式过滤数据,wireshark 正则表达式过滤info接口 正则表达式过滤数据_打印sql语句_12,第12张

也可以在不使用数据库的情况下测试正则表达式的正确性:

SELECT 来测试正则表达式,REGEXP检查总是返回0或1,

SELECT  'HELLO‘  REGEXP '0‘//返回为0

下面给出一个本人再tp3中的实例:

$data['flag'] = '0';
if(I('get.sea') == 1){  //如果获取到前端传来的sea的值并且值等于1,则给查询条件添加if里面的条件
            $data['_string'] = "material_id IN(material_id REGEXP '[-]*[0][1]' OR material_id REGEXP '[[:alpha:]]*[0][1]')";
//            $map['_string'] = "material_id REGEXP '[-]*[0][1]'";
//            $map['_logic'] = 'or';
//            $data['_complex'] = $map;
        }
$query = M('test');
        $query->where($data)->select();
        echo $query->_sql();exit; ---tp3打印sql语句方法
输出结果:SELECT * FROM `security_code` WHERE `flag` = 0 AND ( material_id IN(material_id REGEXP '[-]*[0][1]' OR material_id REGEXP '[[:alpha:]]*[0][1]'));

(tp3打印sql语句方法:)

最后整理一下tp3的组合查询

组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string)、复合查询(_complex)、请求字符串查询(_query),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索引方式,索引相同的特殊查询会被覆盖。

一、字符串模式查询

数组条件可以和字符串条件(采用_string 作为查询条件)混合使用,例如:


    1. $User = M("User"); // 实例化User对象
    2. $map['id'] = array('neq',1);
    3. $map['name'] = 'ok';
    4. $map['_string'] = 'status=1 AND score>10';
    5. $User->where($map)->select(); 


    最后得到的查询条件就成了:


    1. ( `id` != 1 ) AND ( `name` = 'ok' ) AND ( status=1 AND score>10 )


    二、请求字符串查询方式

    请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。


    1. $map['id'] = array('gt','100');
    2. $map['_query'] = 'status=1&score=100&_logic=or';


    得到的查询条件是:

    1. `id`>100 AND (`status` = '1' OR `score` = '100')


    三、复合查询

    复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。例如:


    1. $where['name']  = array('like', '%thinkphp%');
    2. $where['title']  = array('like','%thinkphp%');
    3. $where['_logic'] = 'or';
    4. $map['_complex'] = $where;
    5. $map['id']  = array('gt',1);


    查询条件是

    1. ( id > 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp%') )


    复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。很多查询方式可以相互转换,例如上面的查询条件可以改成:


    1. $where['id'] = array('gt',1);
    2. $where['_string'] = ' (name like "%thinkphp%")  OR ( title like "%thinkphp") ';


    最后生成的SQL语句是一致的。


    以上就是本文的全部内容,希望对大家的学习有所帮助。


    https://www.xamrdz.com/database/69y1960853.html

    相关文章: