学习正则表达式基础
本篇文章讲述了JavaScript的正则表达式的基础,大家对于JavaScript正则表达式不熟悉的正好可以来学习学习,讲的都是JavaScript比较基础的正则表达式,不熟悉的同学我们一起来看看吧!
正则表达式学习(持续更新)
今天在学javascript的时候学到了RegExp对象,借机学习一下正则表达式,以前没接触过,趁机学习一波,很舒服。
参考网站:正则表达式30分钟入门教程点击打开链接
1.什么是正则表达式
正则表达式是用来表述字符串匹配的规则。
2.正则表达式的相关概念
2.1元字符
元字符是正则表达式中自己规定的一种特殊符号,在正则表达式中加入用以代替某些规则。
\b | 表示单词的开始或结束 |
. | 表示除换行以外的任意字符 |
* | 表示*前面出现的任意个数的该字符,例如a*,表示前面有任意个数的a(重复0次或多次) |
+ | 表示+前面出现的任意个数的该字符,例如a+,表示前面有任意个数的a(重复1次或多次) |
? | 重复0或1次 |
{n} | 重复n次 |
{n, } | 重复大于等于n次 |
{n, m} | 重复n到m次 |
\d | 表示一个0-9的数字 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符,包括空格、制表符、换行符、中文全角空格等 |
^ | 匹配字符串的开始 |
& | 匹配字符串的结束 |
3.简单的正则表达式
直接从例子走起:
例1:当我想去匹配单词hello时,所写的正则表达式(匹配规则)为:hello
这样会匹配到所有含有hello的单词,如:helloworld也被匹配了进来,但如果只想匹配hello,则需要使用元字符\b,将hello前后断开,形成单独的单词hello,则正则表达式应该为:\bhello\b
例2:当要找的hello后面任意字符处跟着一个world,则应当使用元字符.和*,正则表达式为\bhello\b.*\world\b
例3:当想去匹配021-xxxxxxx类似这样的电话号码时,应当使用021-\d\d\d\d\d\d\d,这其中“021-”为简单的字符,不代表任何特殊含义,而后面使用的\d为元字符。这个正则表达式可简写为021-\d{7},代表\d重复了7次。
例4:匹配1个或多个连续数字,\d+
例5:匹配以a开头的单词,\ba\w*\b
例6:匹配5-12位的QQ号,^\d{5, 12}&
4.字符转义
如果想要查找的字符串里面有元字符,需要在元字符前面加上\来将元字符转为普通的字符。
5.字符类
这部分解决的问题是如果想要匹配的字符没有相应的元字符对应怎么办,那么我们需要手动创建一个字符类。
例如如果数字0-9没有\d与之匹配,那么当我们想要查找0-9的任意数字时,可以创建一个[0-9]的字符类,它的作用与\d完全相同。
例如正则表达式 \(?0\d{2}[), -]?\d{8}可以用来匹配电话号码,依次解释一下\(代表对(进行转义,?表示其重复0或1次,\d表示两个数字,[), -]表示)和-的字符类,?表示其重复0或1次,后接着有8个数字。
6.分枝条件
上面写的 \(?0\d{2}[), -]?\d{8}这样的正则表达式可能会匹配到(01012345678或(010-12345678等不正确的字符串,对于这样的情况可以使用分枝条件,分枝条件与js中的逻辑或||类似,并且都是短路操作符,从左到右匹配到一个条件能判断时就结束。
对于上面的情况可以写为 \(0\d{2}\)\d{8}|0\d{2}-\d{8}|\(0\d{2}\)\d{8}
7.分组
该部分为了解决重复的不是单个字符,而是多个字符的问题。重复单个字符时我们可以使用字符+元字符里面的限定符这样的写法,但当重复字符为多个时,可以在重复字符外加上()。例如下面的正则表达式可用来表示ip地址。
(2[0-4]\d|25[0-5]|[01]\d\d?\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
8.反义
当需要查找不属于某个能够简单定义的字符时,例如除了xxx以外的字符时,需要用到反义
\W | 匹配任意不是字母、数字、下划线、汉字的字符 |
\D | 匹配任意不是数字的字符 |
\B | 匹配任意不是单词开头或结束位置的字符 |
\S | 匹配任意不是空白的字符 |
[^x] | 匹配除了x以外的字符 |
[^aeiou] | 匹配除了aeiou之外的字符 |
例如正则表达式^\S+&用来匹配一段不含空白符的字符串
9.后向引用
这部分的内容跟前面的分组是匹配的,当我们使用()为字符分组后,这个分组我们可以通过编号的方式在后面继续引用,对于通过()进行的分组,按照( 出现的顺序从1开始进行分组,例如正则表达式\b(\w+)\s+\1\b,可以用来匹配重复出现的单词,例如go go等,这里就是通过\1引用了之前出现的分组。
其他涉及到的后向引用语法有:
(exp) | 匹配exp,并捕获当前内容到自动的分组里 |
(? |
匹配exp,并捕获当前内容并分配组名为name |
(?:exp) | 匹配exp,不为捕获的内容分配组名 |
10.零宽断言
用于查找在某部分内容之前或之后但不包括该内容的部分。
正则表达式(?=exp)的意思就是断言后面出现的部分可以匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分。比如查找I'm dancing and singing时会匹配dance和sing(由于有\w+不会匹配为s)。
正则表达式(?<=exp)的意思是断言前面的部分可以匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re为开头的单词的后半部分,例如查找reading时会匹配到ading。
假如你想给一个很长的数字每三位加一个逗号,例如对123456789加逗号,可以使用正则表达式((?<=\d)\d{3})+\b,查找结果为234567890(这部分查找规则没看懂。。。)
下面的例子同时使用两种断言(?=<\s)\d+(?=\s),用来匹配两个空白字符之间的数字,不包括空白字符。
总的来看,零宽断言的目的就是为了按照一定的规则确定匹配字符的起始点或终止点。
11.负向零宽断言
前面提到了使用反义来查找不是某个字符或不在某个字符里。
例如如果想查找一个单词出现了字母q而后面跟的不是u。可能会写\bq[^u]\w*\b。但对于这样的表达式,当q出现在单词结尾时就会出现错误,因为[^u]会将单词的间隔符匹配掉,这样会进而匹配下一个单词,它会匹配到Iraq fighting这样的字符串。
为了解决反义的占用问题,我们可以使用负向零宽断言,因为它只匹配一个位置,不会消耗掉任何字符。上面表达式的可以写为\bq(?!u)\w*\b。
同理,我们用(?
一个更复杂的例子:(?<=<(\w+)>).*(?=<\/\1>)
看到前面的(?<=)和后面的(?=),则知道前后都为零宽断言,而<(\w+)>则代表html标记,如果前面的为
12.注释
通过语法(?#comment)来包含注释,例如2[0-4]\d(?#200-249)。
13.贪婪与懒惰
在处理字符串匹配问题时,通常的行为是匹配尽可能多的字符。以表达式a.*b和字符串aabab为例,会匹配aabab,而不是匹配ab,这样的匹配规则称为贪婪匹配。
而有时,我们需要匹配尽可能少字符的懒惰匹配,这时,需要在上面所说的限定符后面加上?,如a.*?b就将贪婪匹配转化为懒惰匹配,此时会匹配到aab(1-3的字符)和ab(4-5的字符)(具体原因涉及到正则表达式的匹配规则)。
14.处理选项
类似于js里面的flag,有不区别大小写、多行模式、全局模式等。
15.平衡组/递归匹配
这部分为了处理匹配问题,例如想匹配数学表达式中(5*3)))中的(5*3),不能简单的写为\(.*\),这样会匹配到整个表达式。那么应当采取的匹配策略类似于学到过的括号匹配问题,用栈来解决,遇到(压栈,遇到)弹栈,如果最后栈为空,这说明表达式里面的括号完全匹配,如果不为空,正则表达式引擎会回溯来使得括号匹配。
相关推荐:
Atas ialah kandungan terperinci 学习正则表达式基础. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Ungkapan biasa PHP ialah alat yang berkuasa untuk pemprosesan dan penukaran teks. Ia boleh mengurus maklumat teks dengan berkesan dengan menghuraikan kandungan teks dan menggantikan atau memintasnya mengikut corak tertentu. Antaranya, aplikasi biasa ungkapan biasa adalah untuk menggantikan rentetan bermula dengan aksara tertentu Kami akan menerangkannya seperti berikut

Ungkapan biasa Golang menggunakan aksara paip | untuk memadankan berbilang perkataan atau rentetan, memisahkan setiap pilihan sebagai ungkapan OR logik. Contohnya: padanan "musang" atau "anjing": musang|padanan anjing "cepat", "coklat" atau "malas": (cepat|coklat|malas) sepadan dengan "Pergi", "Python" atau "Java": Pergi| Python |Java memadankan perkataan atau kod zip 4 digit: ([a-zA

PHP ialah bahasa skrip sebelah pelayan sumber terbuka yang digunakan secara meluas yang boleh mengendalikan semua tugas dalam pembangunan web. PHP digunakan secara meluas dalam pembangunan web, terutamanya untuk prestasi cemerlangnya dalam pemprosesan data dinamik, jadi ia disukai dan digunakan oleh ramai pembangun. Dalam artikel ini, kami akan menerangkan asas PHP langkah demi langkah untuk membantu pemula daripada mula menjadi mahir. 1. Sintaks asas PHP ialah bahasa yang ditafsirkan yang kodnya serupa dengan HTML, CSS dan JavaScript. Setiap penyata PHP berakhir dengan koma bertitik;

Cara mengalih keluar bahasa Cina menggunakan peraturan biasa dalam PHP: 1. Buat fail contoh PHP 2. Tentukan rentetan yang mengandungi bahasa Cina dan Inggeris 3. Gunakan "preg_replace('/([\x80-\xff]*)/i'; '',$a);" Kaedah biasa boleh mengalih keluar aksara Cina daripada hasil pertanyaan.

Dalam artikel ini, kita akan belajar cara mengalih keluar teg HTML dan mengekstrak kandungan teks biasa daripada rentetan HTML menggunakan ungkapan biasa PHP. Untuk menunjukkan cara mengalih keluar teg HTML, mari kita tentukan rentetan yang mengandungi teg HTML dahulu.

Keselamatan tapak web telah menarik lebih banyak perhatian, dan menggunakan protokol HTTPS untuk memastikan keselamatan penghantaran data telah menjadi bahagian penting dalam pembangunan tapak web semasa. Dalam pembangunan PHP, bagaimana untuk menggunakan ungkapan biasa untuk mengesahkan sama ada URL adalah protokol HTTPS? Mari ketahui di bawah. Ungkapan biasa Ungkapan biasa ialah ungkapan yang digunakan untuk menerangkan peraturan Ia adalah alat yang berkuasa untuk memproses teks dan digunakan secara meluas dalam pemadanan teks, carian dan penggantian. Dalam pembangunan PHP, kita boleh menggunakan ungkapan biasa untuk memadankan http dalam URL

Berkongsi petua tentang menggunakan ungkapan biasa PHP untuk melaksanakan fungsi penggantian bahasa Cina Dalam pembangunan web, kami sering menghadapi situasi di mana kandungan bahasa Cina perlu diganti. Sebagai bahasa skrip sebelah pelayan yang popular, PHP menyediakan fungsi ekspresi biasa yang berkuasa, yang boleh merealisasikan penggantian bahasa Cina dengan mudah. Artikel ini akan berkongsi beberapa teknik untuk menggunakan ungkapan biasa untuk melaksanakan penggantian bahasa Cina dalam PHP dan memberikan contoh kod khusus. 1. Gunakan fungsi preg_replace untuk melaksanakan penggantian bahasa Cina Fungsi preg_replace dalam PHP boleh digunakan

Python, sebagai bahasa pengaturcaraan peringkat tinggi, mudah dipelajari dan digunakan. Sebaik sahaja anda perlu menulis program Python, anda pasti akan menghadapi ralat sintaks, dan ralat sintaks ungkapan adalah perkara biasa. Dalam artikel ini, kita akan membincangkan cara menyelesaikan ralat sintaks ungkapan dalam Python. Ralat sintaks ungkapan adalah salah satu ralat yang paling biasa dalam Python, dan ia biasanya disebabkan oleh penggunaan sintaks yang salah atau kehilangan komponen yang diperlukan. Dalam Python, ungkapan biasanya terdiri daripada nombor, rentetan, pembolehubah dan pengendali. paling biasa
