Rumah pembangunan bahagian belakang tutorial php 正则表达式详细基础实例解析

正则表达式详细基础实例解析

Aug 29, 2019 am 11:57 AM
ungkapan biasa

正则表达式是我们验证是经常见到的!下面我和大家一起分享一下如何更简单的理解正则表达式。
首先,说一下正则名字的命名:

这个单词我想大家都会眼熟吧!“Regular Expression”。  Regular Expression的“Regular”一般被译为“正则”、“正规”、“常规”。此处的“Regular”即是“规则”、“规律”的意思,Regular Expression即“描述某种规则的表达式”之意,也就是我们所说的正则表达式。其实正则表达式说白了就是用来规范某种行为的!或者说是一种约束,就好比我们必须遵守交通规则是的。
我个人感觉如果想把正则搞懂、搞明白也不难!只要把其中的一些必须记住的东西外,再加上灵活的运用,这样就可以了!
好的! 接下来我就来深入到正则的主体,
我们来先看看正则关键的东西,如果把这些东西都搞明白了!一般在项目中就没有问题了!

第一个“\”
这个是俗称转义字符,就是把一个字符标记为一个特殊字符或者原义字符。如:“n” 就是匹配“n”  。如果是“\n”  则是换行符。
有人该问了如果我就是想写“\”这个斜杠呢? 这个也很简单啊!就直接是这样写“\\”就可以了!为什么写两个“\\”呢!就是为了区分。

第二个“^”
这个是俗称开始字符,就是说准备写正则了!如果设置了RegExp对象的Multiline属性,^也匹配“\n”或者“\r”之后的位置。

第三个“$”
这个是俗称结束字符,也可以说成收尾(很不专业的解释)!如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置

第四个“*”
这个是匹配前面的子表达式零次或者多次。如:zo*能匹配“z”以及“zo”或者“zoo”。这个“*”也就是相当于{0,}

第五个“+”
这个是匹配前面的子表达式一次或者多次。如:“zo+”能匹配“zo”以及“zoo”或者“zooo”。这个“*”和“+”差不多一个是开始零次一个是一次。这个“+”相当于{1,}。

第六个“?”
这个是匹配前面的子表达式零次或者一次。如:“do(es)?”可以匹配“do”或者“does”。这个问号的意思就是要么匹配零次要么匹配一次!

第七个“{}”
这个符号是匹配多少次的,
1,{n}匹配确定的n次,n是一个非负整数,如:“o{2}”这个的意思就是匹配两个“oo”, 如: good,food等!不过不能匹配body,因为就一个o!
2,{n,}匹配至少n次,n是个非负整数,如:“o{2,}” 这个的意思就是匹配两个以上的“oo”,如:good,goood,gooood等。“o{1,}”等价于“o+”。“o{0,}”这个等价于“o*”。
3,{n,m}这个是最少匹配n次最多匹配m次,n和m都是非负整数,其中n<=m。例如:“o{1,3}”匹配body,food,foood。不过不匹配fooood。“o{0,1}”等价于“o?”。这里写的时候要注意一下,就是逗号和两个数之间不能有空格。

第八个“?”特殊用法
当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。所谓非贪婪就是以最少为好,非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。

第九个“.”
匹配除换行符“\n”之外的任何单个字符。如果想匹配换行符“\n”再内的任何字符,就使用“(.|\n)”的模式。

第十个“pattern”
这个“pattern”不是很好理解,刚一看比较晕!不过我对这个的理解如下希望对大家有用:
1. ?:pattern 匹配pattern但不获取匹配结果, 例如:k(?:1|2|3) k在123中任意匹配一个,例子:k1|k2
2. ?=pattern 正向肯定预查 例如:K(?=1|2|3) 当K匹配123中任意一个时 选择K 例子:k1中的k或者k2中的k
3. ?!pattern 正向否定预查 例如:k(?!1|2|3) 当K不匹配123中的任意一个时 选择K 例子:不匹配k1中的k,不过可以是k4,k5
4. ?<=pattern 反向肯定预查 例如:(?<=1|2|3)k 当K匹配123中任意一个时 选择K 例子:1k中的k或者2k中的K
5. ?

第十一个“|”
这个符号就是或的意思,比如:“f|good”能匹配“f”或“good”,如果这样呢“(f|g)ood”则匹配“food”或“good”。

第十二个“[]”
这个符号是字符集和的意思,和“{}”看上去差不多,不过意义可就差多了。

第十三个“()”
这个符号式数组或者是集合

1、[xyz] 匹配所包含的任意一个字符。就是说三个之中选择一个。例子:“[abc]”可以匹配“company”中的“a”不过不可以匹配“beautiful”因为用到了里面的两个字母。
2、[^xyz] 这个是负值字符集合,也可以说成是“非”。例子:“[^abc]”可以匹配“drop”等!只要单词里没有“abc”这三个字母就可以。
3、[a-z] 字符的范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。也可以写成“[0-9]”这个是匹配0到9直接打数字。
4、[^a-z] 这个我想不用说大家就应该想到是什么意思了,对了!就是你想的那个意思:不在“a”到“z”范围内的任意字符,一开始我看到这个的时候以为是不在a到z之间的字母呢!我说如果不在a到z之间的字母那只有汉语中的“ü” 了!这个好像读“喻”!呵呵! 大家看清楚了啊!是字符,不是字母。

下面大家和我一起看看“\”和字母所匹配的特殊含义,
“\b” 这个是匹配一个单词的边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。这个我感觉比较好记大家可以这样记:边界的边是b开头的!
“\B”这个是和“\b”是相反的,匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
“\d”这个是用的比较多!我建议大家对这个多记记,这个是匹配数字字符,相当于[0-9]。
“\D”这个也很好理解,也是相反的意思就是说不是数字的,相当于[^0-9]。
“\f”这个是匹配一个换页符。这个不做过多解释了!下面的四个也就过多不做过多解释了。只要记住就可以了!在项目中会用就可以了!
“\n”这个是匹配一个换行符。
“\r”这个是匹配一个回车符。
“\t”这个是匹配一个制表符。
“\v”这个是匹配一个垂直制表符。
“\s”这个匹配任何空字符,匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。也就是这个把上面的五个都包括了!
“\S”这个是非空白字符等价于[^ \f\n\r\t\v]。
说到这里大家都可能感觉到正则其实就是这些字符嘛!而且有些是可以靠我们的逻辑思维推理出来的,而且有些是重复的,只要大家能够灵活的运用就可以了。

“\w”这个是匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。这个在实际中用的也挺多的也建议大家多记记这个。

“\W”这个是匹配非单词数字字符。等价于“[^A-Za-z0-9_]”。

好的!基本上要记得就是这么多了!这些可能有些正则高手该说了“你这个根本不全啊?” 我先提前解释一下吧,我所写的只是一些基础的,在项目中常见的,比较实用的,基本上这些在项目中就可以运用自如了。
接下来呢,和大家做一些实质性的东西,和大家一起解析一些正则表达式。
比如这个正则:^([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$
这个正则我想对正则高手来说一看就知道是什么了。当然一些逻辑思维比较强的看两眼也就知道这个是什么了,没错就是时间正则。

OK 我们来解析一下这个正则从这个“^”开始,“([0-1]?[0-9]|2[0-3])”是个组,“[0-1]?”这个问号的作用是0或1最多有零个或者一个,“[0-9]”0至9之间任意一个数,“|”这个是“或”的意思,就是说不是“[0-1]?[0-9]”就是“2[0-3]”,“2[0-3]” 这个是前面的2就是代表2,后面0至3是0到3之间任意一个数,“:”就是代表“:”,“([0-5][0-9])”也是个组,“[0-5]”是0到5之间任意一个数,“[0-9]”是0到9之间任意一个数,“:”也是本意,“([0-5][0-9])”也是个组,“[0-5]”是0到5之间任意一个数,“[0-9]”是0到9之间任意一个数,“$”这个是结束符。
再和大家解析一个小数

比如:^[1-9]+\d*(\.[0-9]{1,2})?|0(\.[0-9]{1,2})?$
“^”是开始符,“[1-9]+”其中“+”的意思是1到9之间最少有一个或者多个,“\d*”这个“\d”是数字,这个“*”是最少有零个数字或者有多个数字,“(\.[0-9]{1,2})?”这个组里面“\.”是原意点,“[0-9]{1,2}” 0到9之间有一个或者有两个数字,后面这个问号“?”意思是有零个或者一个它“(\.[0-9]{1,2})”。“|” 是要么是“[1-9]+\d*(\.[0-9]{1,2})?”要么是“0(\.[0-9]{1,2})?”。“0(\.[0-9]{1,2})?”这个里面的0是原意,“(\.[0-9]{1,2})?”这个组里面“\.”是原意点,“[0-9]{1,2}” 0到9之间有一个或者有两个数字,后面这个问号“?”意思是有零个或者一个它“(\.[0-9]{1,2})”。

下面我例举出一些常见的正则表达式来给大家说说:

^[1-9]\d*$ //匹配正整数   
^-[1-9]\d*$ //匹配负整数   
^-?[1-9]\d*$ //匹配整数   
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)   
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)   
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数   
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数   
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数   
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)   
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
^[a-zA-Z][a-zA-Z0-9_]{4,15}$ //匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
^\s*|\s*$ //匹配首尾空白字符的正则表达式
\n\s*\r //匹配空白行的正则表达式
[^\x00-\xff] //匹配双字节字符(包括汉字在内)
[\u4e00-\u9fa5] //匹配中文字符的正则表达式

用户名
^[a-z0-9_-]{3,16}$

密码
^[a-z0-9_-]{6,18}$

十六进制值
^#?([a-f0-9]{6}|[a-f0-9]{3})$

电子邮箱
^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$
^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$

URL
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$

IP 地址
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)


^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

HTML 标签
^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$

以上便是关于正则表达式的一些基础知识配合实际例子的讲解,希望可以帮助到对正则表达式感到迷惑的同学,如有错误请指出。

更多相关问题请访问PHP中文网:PHP视频教程

Atas ialah kandungan terperinci 正则表达式详细基础实例解析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pengesahan ungkapan biasa PHP: pengesanan format nombor Pengesahan ungkapan biasa PHP: pengesanan format nombor Mar 21, 2024 am 09:45 AM

Pengesahan ungkapan biasa PHP: Pengesanan format nombor Semasa menulis program PHP, selalunya perlu untuk mengesahkan data yang dimasukkan oleh pengguna Salah satu pengesahan biasa adalah untuk memeriksa sama ada data mematuhi format nombor yang ditentukan. Dalam PHP, anda boleh menggunakan ungkapan biasa untuk mencapai pengesahan jenis ini. Artikel ini akan memperkenalkan cara menggunakan ungkapan biasa PHP untuk mengesahkan format nombor dan memberikan contoh kod khusus. Mula-mula, mari kita lihat keperluan pengesahan format nombor biasa: Integer: hanya mengandungi nombor 0-9, boleh bermula dengan tanda tambah atau tolak dan tidak mengandungi titik perpuluhan. titik terapung

Bagaimana untuk mengesahkan alamat e-mel di Golang menggunakan ungkapan biasa? Bagaimana untuk mengesahkan alamat e-mel di Golang menggunakan ungkapan biasa? May 31, 2024 pm 01:04 PM

Untuk mengesahkan alamat e-mel di Golang menggunakan ungkapan biasa, ikut langkah berikut: Gunakan regexp.MustCompile untuk mencipta corak ungkapan biasa yang sepadan dengan format alamat e-mel yang sah. Gunakan fungsi MatchString untuk menyemak sama ada rentetan sepadan dengan corak. Corak ini merangkumi kebanyakan format alamat e-mel yang sah, termasuk: Nama pengguna tempatan boleh mengandungi huruf, nombor dan aksara khas: !.#$%&'*+/=?^_{|}~-`Nama domain mesti mengandungi sekurang-kurangnya Satu huruf, diikuti dengan huruf, nombor atau sempang Domain peringkat teratas (TLD) tidak boleh lebih daripada 63 aksara.

Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Jun 02, 2024 am 09:00 AM

Dalam Go, anda boleh menggunakan ungkapan biasa untuk memadankan cap masa: susun rentetan ungkapan biasa, seperti yang digunakan untuk memadankan cap masa ISO8601: ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Gunakan fungsi regexp.MatchString untuk menyemak sama ada rentetan sepadan dengan ungkapan biasa.

Kuasai ungkapan biasa dan pemprosesan rentetan dalam bahasa Go Kuasai ungkapan biasa dan pemprosesan rentetan dalam bahasa Go Nov 30, 2023 am 09:54 AM

Sebagai bahasa pengaturcaraan moden, bahasa Go menyediakan ungkapan biasa yang berkuasa dan fungsi pemprosesan rentetan, membolehkan pembangun memproses data rentetan dengan lebih cekap. Adalah sangat penting bagi pembangun untuk menguasai ungkapan biasa dan pemprosesan rentetan dalam bahasa Go. Artikel ini akan memperkenalkan secara terperinci konsep asas dan penggunaan ungkapan biasa dalam bahasa Go dan cara menggunakan bahasa Go untuk memproses rentetan. 1. Ungkapan biasa Ungkapan biasa ialah alat yang digunakan untuk menerangkan corak rentetan Mereka boleh melaksanakan operasi dengan mudah seperti padanan rentetan, carian dan penggantian.

Ungkapan biasa PHP: padanan tepat dan pengecualian kemasukan kabur Ungkapan biasa PHP: padanan tepat dan pengecualian kemasukan kabur Feb 28, 2024 pm 01:03 PM

Ungkapan Biasa PHP: Padanan Tepat dan Pengecualian Ungkapan tetap kemasukan kabur ialah alat padanan teks yang berkuasa yang boleh membantu pengaturcara melakukan carian, penggantian dan penapisan yang cekap semasa memproses teks. Dalam PHP, ungkapan biasa juga digunakan secara meluas dalam pemprosesan rentetan dan pemadanan data. Artikel ini akan menumpukan pada cara melakukan pemadanan tepat dan mengecualikan operasi kemasukan kabur dalam PHP dan akan menggambarkannya dengan contoh kod khusus. Padanan tepat Padanan tepat bermaksud padanan hanya rentetan yang memenuhi syarat yang tepat, bukan sebarang variasi atau perkataan tambahan.

Bagaimana untuk mengesahkan kata laluan menggunakan ungkapan biasa dalam Go? Bagaimana untuk mengesahkan kata laluan menggunakan ungkapan biasa dalam Go? Jun 02, 2024 pm 07:31 PM

Kaedah menggunakan ungkapan biasa untuk mengesahkan kata laluan dalam Go adalah seperti berikut: Tentukan corak ungkapan biasa yang memenuhi keperluan kata laluan minimum: sekurang-kurangnya 8 aksara, termasuk huruf kecil, huruf besar, nombor dan aksara khas. Susun corak ungkapan biasa menggunakan fungsi MustCompile daripada pakej regexp. Gunakan kaedah MatchString untuk menguji sama ada rentetan input sepadan dengan corak ungkapan biasa.

Penapisan aksara Cina: Amalan ungkapan biasa PHP Penapisan aksara Cina: Amalan ungkapan biasa PHP Mar 24, 2024 pm 04:48 PM

PHP adalah bahasa pengaturcaraan yang digunakan secara meluas, terutamanya popular dalam bidang pembangunan web. Dalam proses pembangunan web, kami sering menghadapi keperluan untuk menapis dan mengesahkan input teks oleh pengguna, antaranya penapisan aksara adalah operasi yang sangat penting. Artikel ini akan memperkenalkan cara menggunakan ungkapan biasa dalam PHP untuk melaksanakan penapisan aksara Cina dan memberikan contoh kod khusus. Pertama sekali, kita perlu menjelaskan bahawa julat Unicode aksara Cina adalah dari u4e00 hingga u9fa5, iaitu, semua aksara Cina berada dalam julat ini.

Apakah kad bebas ungkapan biasa? Apakah kad bebas ungkapan biasa? Nov 17, 2023 pm 01:40 PM

Kad bebas ungkapan biasa termasuk ".", "*", "+", "?", "^", "$", "[]", "[^]", "[a-z]", "[A-Z] " ,"[0-9]","\d","\D","\w","\W","\s&quo

See all articles