整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

PHP入门读书笔记(十一):正则表达式语法规则

PHP入门读书笔记(十一):正则表达式语法规则

则表达式是一种描述字符串结构的语法规则,是一个特定的格式化模式。可以匹配、替换、截取匹配的字符串。

一个完整的正则表达式由两部分构成,元字符和文本字符。元字符就是具有特殊含义的字符,如“*”,“?”。文本字符就是普通的文本,如字母和数字等。PCRE风格的正则表达式会字定界符“/”的中间。如:/^http:\/\/(www\.)?.+.?$/。下面的例子没有遵守这个风格。

下面介绍它的语法规则

一、行定位符(^和$)

行定位符就是用来描述字符串的边界。“^”表示行的开始,“$”表示行的结尾。

如:^stu 表示是匹配字符串是stu开头的,student,study 就可以被找出来,而tastu,tbstuay就不能匹配了。

stu$ 表示是匹配字符串是stu结尾的,tastu就可以被找出来了。

如果想要匹配的字符串可以出现在字符串的任意位置,那么直接写stu就可以了。

二、单词定界符(\b、\B)

想匹配字符串出现的任意位置,可以直接使用字符串。像tm可以在 html,utmost中被找出来。但现在如果要匹配单词tm,而不是单词的一部分,就可以使用单词界定符\b表示要查找的字符串为一个完整的单词。如:\btm\b

\B 的意思是匹配的字符串不能是一个完整的单词,而是其他单词或者字符串的一部分。和\b的意思的刚好相反的。

三、字符类([])

正则表达式是区分大小写的,如果要忽略大小写可以使用方括号表达式“[]”。只要匹配的字符串出现在方括号内,即可表示匹配成功。要注意的是,一个方括号只能匹配一个字符。如要匹配字符串tm不区分大小写,可以写作:[Tt][Mm]

四、选择字符(|)

选择字符可以理解为或。T|tM|m 意思就是字母T或者t开头,后面接一个字母M或者m。“[]”和“|”使用区别在于“[]”只能匹配单个字符,而“|”可以匹配任意长度的字符串。

五、连字符(-)

连字符可以表示字符的范围。比如我们规定一个字符串只能是小写字母开头,我们可以写[a,b,c,d,.....],用连字符就可以之间写[a-z]

六、排除字符([^])

^放进了方括号中,表示的是排除的意思。如:[^a-z] 表示的就是不能以小写字母开头

七、限定符(?,*,+,{n,m})

?:匹配前面的字符零次或者一次。如:colou?r,该表达式可以匹配 colour 和 color

+:匹配前面的字符一次或者多次。如:go+gle,该表达式可以匹配的范围从google到goo...gle

*:匹配前面的字符零次或者多次。如:go*gle,该表达式可以匹配的范围从ggle到goo...gle

{n}:匹配前面的字符n次。如:go{2}gle,该表达式只匹配google

{n,}:匹配前面的字符最少n次。如:go{n,}gle,该表达式可以匹配的范围从google到goo..gle

{n,m}:匹配前面的字符最少n次,最多m次。如:employe{0,2},该表达式可以匹配employ,employe和employee这3种情况。

八、点号字符(.)

点字符可以匹配出除换行符外的任意一个字符。如匹配s开头,t结尾,中间包含一个字母的单词,可以写作:^s.t$。可以匹配到sat、set、sit等等。匹配一个单词,它的第一个字母是r,第3个字母是s,最后一个字母是t。那么可以写作:^r.s.*t$

九、转义字符(\)

正则表达式也是用转义字符将特殊字符(如:“.”,“?”,“\”等等)变为普通的字符。如匹配127.0.0.1的IP地址,可以写成:[0-9]{1,3}(\.[0-9]{1-3}){3}

这里的点就是通过转义。

十、反斜线(\)

“\”可以做转义字符外,还能做其他功能。

1、将一些不可打印的字符显示出来

\a:警报

\b:退格

\e:escape

\f:换页符

\r:回车符

\t:水平制表符

\xhh:十六进制代码

\ddd:八进制代码

\cx:也就是control-x的缩写,匹配由x指明的控制字符,x是任意字符

2、还可以指定预定义字符集

\d:任意一个十进制数字,相当于[0-9]

\D:任意一个非十进制数字

\s:任意一个空白字符(空格、换行符、换页符、回车符、水平制表符),相当于[\f\n\r\t]

\S:任意一个非空白字符

\w:任意一个单词字符,相当于[a-zA-Z0-9]

\W:任意一个非单词字符

3、定义断言

\b:单词界定符,用来匹配字符串中的某些位置。\b是以统一的定界符来匹配。

\B:非单词定界符序列

\A:总是能够匹配待搜索文本的起始位置

\Z:表示在未指定任何模式下匹配的字符,通常是字符串的末尾位置,或者是在字符串末尾的换行符之前的位置

\z:只匹配字符串的末尾,而不考虑任何换行符

\G:当前匹配的起始位置

十一、括号字符(())

1、可以改变限定符的作用范围(如:“|”,“*”,“^”等等)。比如:(thir|four)th,这个表达式的意思是可以匹配单词thirth或者fonrth,如果不用小括号,可以匹配单词thir和fourth

2、可以分组,也就是子表达式。如:(\.[0-9]{1,3}){3},就是对分组(\.[0-9]{1,3})进行重复操作。

十二、反向引用

反向引用,就是依靠子表达式的“记忆”功能来匹配连续出现的字串或字母。如匹配连续两个it,首先将单词it作为分组,然后后面加上“”即可。格式为:(it)。如果匹配的子串不固定,那么就将括号内的字串写成一个正则表达式。如果使用了多个分组,那么可以使用“”、“”来表示每个分组(顺序是从左到右)。

如:([a-z])([A-Z])

除了可以使用数字来表示分组外,还可以自己来指定分组名称。

语法格式:(?P<subname>)

如果想要反向引用该分组,使用如下语法:

语法格式:(?P=subname)

重写表达式([a-z])([A-Z]),为这两个分组分别命名,并反向引用他们,正则表达式如下:

(?P<fir>[a-z])(?P<sec>[A-Z])(?P=fir)(?P=sec)

十三、模式修饰符(待了解)

模式修饰符的作用就是设定模式。也就是规定正则表达式应该如何解释和应用。php的主要模式修饰符如下:

修饰符:i 表达式写法:(?i)...(?-i)、(?i:...)

说明:忽略大小写模式

修饰符:m 表达式写法:(?m)...(?-m)、(?m:...)

说明:多文本模式。也就是说字串内部有个换行符时候,影响“^”和“$”的匹配。

修饰符:s 表达式写法:(?s)...(?-s)、(?s:...)

说明:单文本模式。在此模式下,元字符点号(.)可以匹配换行符。其他模式则不能匹配换行符。

修饰符:x 表达式写法:(?x)...(?-x)、(?x:...)

说明:忽略空白字符


明天来看看php中一些正则表达式函数。

趣是最好的老师,HelloGitHub 就是帮你找到兴趣!

简介

分享 GitHub 上有趣、入门级的开源项目。

这是一个面向编程新手热爱编程对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编程语言的项目让生活变得更美好的工具书籍、学习笔记、教程等,这些开源项目大多都是非常容易上手,而且非常 Cool。主要是希望大家能动手用起来,加入到开源社区中。

  • 会编程的可以贡献代码
  • 不会编程的可以反馈使用这些工具中的 Bug
  • 帮着宣传你觉得优秀的项目
  • Star 项目??
  • 在浏览、参与这些项目的过程中,你将学习到更多编程知识提高编程技巧找到编程的乐趣

    最后 HelloGitHub 这个项目就诞生了


    以下为本期内容|每个月 28 号发刊

    C 项目

    1、ngx_waf:一个 Nginx 防火墙模块。我差点就错过了的宝藏项目,它使用简单不需要复杂的配置,支持的功能直戳我的痛点。你看:

  • 支持 IPV4、IPV6 和 IP 段黑白名单
  • CC 防御即自动拉黑 IP 一段时间
  • 支持 GET、POST、URL、Cookie 等黑名单(正则)
  • C++ 项目

    2、fast-cpp-csv-parser:读取 CSV 文件的 C++ 库(仅头文件)。示例代码:

    # include "csv.h"
    
    int main(){
      io::CSVReader<3> in("ram.csv");
      in.read_header(io::ignore_extra_column, "vendor", "size", "speed");
      std::string vendor; int size; double speed;
      while(in.read_row(vendor, size, speed)){
        // 对 ram.csv 文件中的数据,做你想做的事情吧!
      }
    }
    

    3、UNO:使用 C++ 编写的命令行 UNO 纸牌游戏。操作方便支持人机或联机对战,游戏基于 Asio 网络库和现代 C++ 开发,也有对 C++17 的尝试。分别实现了服务端、客户端,代码简单对 C++ 新手友好,UNO 的爱好者快来玩一玩吧!

    4、godot:一款功能丰富的开源游戏引擎。最初它只是一款 2D 引擎,近期拓展了 3D 部分的能力。相较于 UE4 或者 Unity 这样的成熟商业引擎来说,Godot 还很年轻不够成熟,尤其 3D 方面的能力。但它拥有简易的开发方式,上手简单。而且社区活跃、文档覆盖全面、有较为丰富的示例代码,对于刚入门的游戏开发者友好。同时开源引擎底层代码完全开源,开发者可以阅读和贡献代码,而不是只停留在游戏逻辑开发层面。总而言之 Godot 是一个极有潜力的游戏引擎,推荐给想学习游戏开发的同学

    CSS 项目

    5、water.css:一个专门为简单页面和示例网页准备的 CSS 框架

    Go 项目

    6、fyne:一款 Go 语言跨平台 UI 库。想用 Go 写图形界面应用的小伙伴,快速上手:

    安装
    $ go get fyne.io/fyne
    运行一个 demo
    $ go get fyne.io/fyne/cmd/fyne_demo/
    $ fyne_demo
    

    7、golearn:Go 写的机器学习框架。来,跑个模型试试吧:

    cd $GOPATH/src/github.com/sjwhitworth/golearn/examples/knnclassifier
    go run knnclassifier_iris.go
    

    Java 项目

    8、keepass2android:一个开源的 Android 密码管理器。下载地址,功能:

  • 仅需输入一次安全性很强的密码(很长或随机的密码)
  • 支持几乎可与所有的 Android 的浏览器
  • 支持 .kdbx 文件的读写
  • 能够编辑条目包括附加字符串字段、文件附件、标签等
  • 等等
  • 9、PrettyZoo:一款 Java 写的高颜值 ZooKeeper 客户端桌面应用。该项目使用了 JDK11 以及 JavaFX 编写的 GUI 客户端,代码量适中适合想学习 JavaFX 编写应用的朋友。需要连接 ZK 服务端查看数据的话,手边有这么个工具还是挺方便的。实用和颜值集一身的项目

    10、vueblog:一款轻量级 Java 博客项目。基于 SpringBoot+Vue 实现并附有详细开发文档和讲解视频,让刚学会 Java 的同学也能搞定。每个体面的技术人员可能都有一个自己说了算的博客吧

    JavaScript 项目

    11、x-spreadsheet:基于 JavaScript 实现的轻量级 Web 电子表格库。它功能齐全,包含表格的基本操作和函数等,还有详细的中文文档,在线尝试

    12、h5-Dooring:一款功能齐全的 H5 页面可视化配置平台。让你通过可视化的方式制作出 H5 页面,技术栈以 React 为主,后台采用 Node.js 实现。虽然网上有很多这种工具,但本项目免费开源、功能齐全值得一试

    13、Ant-Forest:基于 Auto.js 的蚂蚁森林能量自动收获脚本。它是个“绿色环保”的项目,我能从中感受到满满的爱和想把它做好的决心!来看看作者开发 Ant-Forest 时解决了哪些难题:

    1. 能量球识别无法使用控件信息(使用基于霍夫变换的图像识别)
    2. 脚本执行逻辑易被打断(使用事件监听及扩展模块增强鲁棒性)
    3. 每次只能运行一次(完善的复查及定时循环功能)
    4. 不同设备分辨率及屏幕比例不同(使用等比缩放/定宽缩放等进行适配)

    14、tui.image-editor:功能齐全的图片编辑器。支持图片剪裁、旋转、涂鸦等功能,实现了 Vue 和 React 封装的组件,便于整合进你的项目

    15、windows95:基于 Electron 实现的 Windows 95 操作系统。它实现了该操作系统下的所有东西,对!所有!想体验下 Windows 95 版的扫雷吗?下载安装即可

    Objective-C 项目

    16、LuLu:免费开源的 macOS 防火墙软件

    PHP 项目

    17、humhub:用 PHP 写的开源社交平台。看过《社交网络》的小伙伴,都知道大名鼎鼎的 Facebook 最早就是扎克伯格用 PHP 语言写出来的,humhub 能够让不会编程的小伙伴也可以用创建出一个社交平台啦。跟着提示一步步操作,不到 1 分钟我的社交平台就建好了

    18、phpbrew:一个编译、安装、管理多版本 PHP 的工具。有了它就可以方便地在不同 PHP 版本之间自由切换啦,特性:

  • 配置选项简化为 Variants 无需担心路径问题
  • 集成至 bash/zsh 等,易于切换版本
  • 易于安装、启用 PHP 扩展
  • Python 项目

    19、python-patterns:Python 设计模式和使用场景的集合

    20、pgcli:支持语法高亮和自动补全的 Postgres 数据库客户端命令行工具。它安装简单上手快速,如果你用过 Postgres 数据库自带的命令行工具,就一定能感受到 pgcli 的迷人之处

    21、15-minute-apps:基于 PyQt 框架写的小型桌面应用程序的集合。想用 Python 写桌面应用的小伙伴,这个项目应该可以帮到你。比如写个扫雷游戏:

    Swift 项目

    22、Pine:一个免费、轻量、简洁的 macOS Markdown 编辑器。功能:

  • 主题
  • LaTex 公式
  • 自动保存
  • 自定义字体
  • 字数统计等写作分析
  • 等等
  • 23、Publish:专为 Swift 开发人员准备的静态网站生成器。让你实现整个网站都是用 Swift 构建的工具,支持多种主题、插件以及更多强大的自定义选项。示例网站,安装和快速开始:

    $ git clone https://github.com/JohnSundell/Publish.git
    $ cd Publish
    $ make
    $ mkdir MyWebsite
    $ cd MyWebsite
    $ publish new
    

    其它

    24、open-source-rover:NASA 面向科技爱好者开源的火星漫游车设计方案和代码。通过该项目你可以使用便宜的树莓派做出自己的火星漫游车,所需的零件很容易就可以买到,遥控部分是使用现成的 Xbox 手柄或者手机,减少花销。喜欢动手和硬件的小伙伴们,这个东西够酷吗?

    25、bat:替代 cat 的命令行工具。你还在命令行用 cat 查看文件吗?那你就 out 啦!今天推荐的 bat 它不仅支持语法高亮,还能展示 Git 的改动。macOS 下安装命令:brew install bat 相信你用过 bat 后就不会再想用回 cat 了

    26、Web-Dev-For-Beginners:微软开源的 Web 开发教程。该教程共有 24 节课,但目前只有英文版

    27、neofetch:展示操作系统信息的命令行工具,支持将近 150 种操作系统

    28、jpeg_tutorial:教你编写 JPEG 解码器的教程,示例为 Rust 代码

    29、sql-style-guide:一份 SQL 语句编写风格建议。比如:

    -- Good
    select *
    from users
    where email = 'example@domain.com'
    
    -- Bad
    select *
    from users
    where email = "example@domain.com"
    

    开源书籍

    30、pure-bash-bible:该书有好多复制就能用的 bash 函数,我愿称其为 bash 的“奇技淫巧”。比如把字母转为大写的函数:

    upper() {
        # Usage: upper "string"
        printf '%s\n' "${1^^}"
    }
    
    $ upper "hello"
    HELLO
    

    机器学习

    31、pulse:根据包含马赛克的人脸图像,生成一张相似容貌的结果。注意不是复原哦,仅可用于人脸

    32、Surface-Defect-Detection:该项目整理了目前大量靠谱的表面缺陷检测数据集,还有最新的顶会论文以及作者的解读笔记。从事视觉方向的小伙伴,心动了吗?


    最后

    迎留言告诉我本期你最喜欢那个项目,如果觉得本文还不错的话,就点赞、转发一波吧~

    rror

    在做php设计以及正则表达式截取字符串时经常遇到乱码的问题,身边很多朋友也在问乱码问题怎么处理。

    所以今天就来写一个乱码的处理方式。

    php输出数据出现乱码有很多种,这里呢就针对输出时出现的乱码进行处理。

    1、先用php来判断需要输出的字符串是哪哪种编码:

    mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));

    该方法会返回数组中的编码的一种,方便大家查看字符串编码

    2、根据字符串的编码,大家选择相应的显示编码即可

    3、如果编码与输出页面的html编码一致,但是偏偏出现乱码了,那么也许就是php页面的问题了,在php页面头部加上

    header("Content-Type:text/html;charset=utf-8");

    上述代码表示该php页面输出以及各种操作均为utf-8编码方式,当然您也可以设置为其他编码方式.

    如果以上两步还是解决不了你的乱码问题,请留言相互探讨。