正则表达式

正则表达式

https://blog.csdn.net/weixin_53496398/article/details/115706498

  • 概述:使用一组字符串来描述,匹配一系列符合某个句法规则的字符串。广泛适用于脚本编辑,文件编辑器如,PHP,Java,Python,Perl,shell等。

  • 优点:可以方便编辑,使用对文本的增删改查等操作。

  • 正则表达式分类

    • 基础正则表达式
    • 扩展正则表达式
  • linux中常用的文本处理工具

    • grep:匹配,查询
    • sed:编辑(增删改查)
    • awk:文本格式化(字符串提取)
  • 通配符

    • “*” 任意长度字符串
    • “?”单个任意字符串
  • grep命令的参数

    • -v:排除匹配的内容
    • -E:支持扩展的正则表达式
    • -l:忽略大小写
    • -n:显示行号
    • -q:匹配内容不显示
    • -c:只对匹配行的计数
  • 基础正则表达式

    • \:转义字符
    • ^:以...开头
    • $:以...结束
    • ^$:表示空行
    • .:匹配任意一个字符
    • *:匹配0次或者多次
    • .*:匹配任意字符串
    • 【list】:列表
    • 【^list】:非list表中的
    • {n}:匹配子表达式n次
    • {n,}:匹配子表达式至少n次
    • {n,m}:匹配子表达式至少n次,最多m次
  • eg:

    nl test.txt 
       1	gd
       2	god
       3	good
       4	goood
       5	gooood
       6	gold
       7	glad
       8	gaad
       9	abCDf
      10	food
      11	162478383
      12	HELLO
      13	010-666888
      14	0665-5666888
      15	ip 192.168.200.10
      16	ip 1.2.3.4
      17	pay $180
    
    
    #打印出包括"$"字符的行且打印出行数
    [root@localhost ~]# grep -n '\$' test.txt 
    17:pay$180
    [root@localhost ~]# awk '/\$/{print}' test.txt 
    pay$180
    
    #过滤出以小写字母开头的行(非:在里面添加非^)
    [root@localhost ~]# grep "^[a-z]" test.txt
    [root@localhost ~]# sed -n '/^[a-z]/p' test.txt
    [root@localhost ~]# awk '/^[a-z]/{print}' test.txt
    
    #过滤出以数字为结尾的行
    [root@localhost ~]# grep '[0-9]$' test.txt 
    [root@localhost ~]# sed -n '/[0-9]$/p' test.txt 
    [root@localhost ~]# awk '/[0-9]$/{print}' test.txt
    
    #查看go0*d go.d go+d go.*d go?d 区别
    [root@localhost ~]# grep -E "go.d" test.txt 
    good
    gold  #.表示匹配任意字符
    [root@localhost ~]# grep -E "go.*d" test.txt 
    god
    good
    goood
    gooood
    gold  #.*表示匹配任意字符
    [root@localhost ~]# grep -E "go*d" test.txt 
    gd
    god
    good
    goood
    gooood  #*表示匹配0次到多次
    [root@localhost ~]# grep -E "go+d" test.txt 
    god
    good
    goood
    gooood  #+表示匹配大于等于一次
    [root@localhost ~]# grep -E "go?d" test.txt 
    gd
    god  #?表示匹配0次或1次
    
    #过滤出电话号码
    [root@localhost ~]# grep -E '[0-9]{3,4}-[0-9]{7,8}' test.txt 
    [root@localhost ~]# sed -n '/[0-9]\{3,4\}-[0-9]\{7,8\}/p' test.txt 
    010-6668888
    0665-5666888
    
    #过滤出IP地址
    [root@localhost ~]# grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' test.txt
    [root@localhost ~]# grep -E '([0-9]{1,3}\.){1,3}[0-9]{1,3}' test.txt 
    ip 192.168.200.10
    ip 1.2.3.4
    
    
  • 扩展正则表达式

    • +:匹配一次以上
    • ?:匹配0次或一次
    • ():括号内为一个整体
    • |:或者
    #过滤ifconfig中的ip
    [root@localhost ~]# ifconfig ens33 | grep -E '([0-9]{1,3}\.){1,3}[0-9]{1,3}'  
    inet 192.168.200.10  netmask 255.255.255.0  broadcast 192.168.200.255
    RX packets 23315  bytes 1903937 (1.8 MiB)
    TX packets 17996  bytes 4077053 (3.8 MiB)
    [root@localhost ~]# ifconfig ens33 | awk '/ inet /{print $2}'
    192.168.200.10
    

nginx正则及location匹配

  • nginx location匹配

    • ^~:对个后续正则表达式标识匹配
    • =:精准匹配
    • ~:区分大小匹配
    • ~*:不区分大小匹配
    • !~:去区分大小的匹配取非
    • !~*:对不区分大小的匹配取非
    • /:通用
  • 正则表达式补充

    • *?:重复前面的字符0次或多次
    • +?:重复前面的字符一次或多次
    • ??:重复前面的字符0次或一次
    • {n,m}?:重复前面的字符n次到m次
    • {n,}?:重复前面的字符n次以上
  • nginx location应用规则

    • location:用于匹配相应的路径,进行控制访问或者反向代理。

    • 位置:配置文件/usr/local/nginx/conf/nginx.conf的http项中的server项里。

    • 用处:server项用于区分不同站点的监听地址、端口号和域名以及相关的站点目录

    • 分类:
      精准匹配:location = / {…}
      正则匹配:location ~ / {…}(匹配即停止)
      一般匹配:location / {…}(遵循最长匹配原则)

    • location 优先级
      1.首先精确匹配=
      2.其次前缀匹配^~
      3.其次是按文件中顺序的正则匹配*
      4.然后匹配不带任何修饰的前缀匹配
      5.最后是交给/ 通用匹配
      location =>location 完整路径>location ^~ 路径>location , 正则顺序>location 部分起始路径>location /*

    • 实用建议规则

      • 一个网站,至少有三个匹配规则定义
        第一个必选规则
        直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。
        可以是一个静态首页,也可以直接转发给后端应用服务器
        location = / {
        proxy_pass http://tomcat_server/;
        }

        第二个必选规则
        处理静态文件请求,这是nginx作为http服务器的强项,有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
        location ^~ /static/ {
        root /webroot/static/;
        }

        location ~* .(html|gif|jpg|jpeg|png|css|js|ico)$ {
        root /webroot/res/;
        }

        第三个规则
        通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器
        非静态文件请求就默认是动态请求
        location / {
        proxy_pass http://tomcat_server;
        }

  • nginx rewrite规则

    • 是使用nginx的全局变量或者子集设置的变量,结合正则表达式,来对URL重定向。

    • 位置:server{}里的location{}里的if{}判断中

    • 例如:http://www.lisi.com/a/we/index.php?id=1&u=str 只对/a/we/index.php重写

    • 语法:rewrite 正则表达式 更换目标 【标志位】

    • 执行顺序:执行server块中的rewrite指令----执行location匹配----执行选定的location中的rewrite指令,如果未找到循环十次返回500==内部错误

    • flag标志位

      • last:相当于Apache的【L】标记,也就是默认
      • break:匹配到本规则后,停止匹配后面规则
      • redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址。
      • permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
        last一般写于server的if中,而break一般用于location中
    • if判断:

      • 语法:if(condition){...},对condition判断,若真则执行
      • -f和!-f:用来判断是否存在文件
      • -d和!-d:用来判断是否存在目录
      • -e和!-e:用来判断是否存在文件或目录
      • -x和!-x:用来判断是否可执行
posted @ 2021-09-27 18:33  whml  阅读(52)  评论(0编辑  收藏  举报