作者:RyuGou 链接:https://www.jianshu.com/p/89fec1accae5 来源:简书
正则表达式用处挺广的,主要用于处理字符串。
想要在计算机语言中使用正则表达式,那么这门计算机语言必须要利用正则引擎去实现相应的正则库。主要的正则引擎分为以下两类:
不同的语言对正则的实现不同,暴露出来的方法也不同,但方法的作用其实都是大同小异,这里用PHP语言做例子。
preg_match(string $pattern, string $subject[, array &$matches])
使用很频繁。函数返回匹配到的结果的次数。只匹配一次,参数 matches
只返回第一条结果。preg_match_all(string $pattern, string $subject[, array &$matches])
使用很频繁。函数返回匹配到的结果的次数。参数matches
只返回所有结果。preg_replace($pattern, $replacement, $subject)
返回匹配过滤后的字符串或者数组。preg_filter($pattern, $replacement, $subject)
返回匹配过滤后的字符串或者数组。
这俩函数,都可以替换字符串,在字符串替换中,俩函数用法完全一致。
这俩函数,不仅可以替换字符串,还可以替换数组!在替换数组的时候,pre_filter
会过滤掉没有匹配到的内容,而pre_replace
不会,这就是他俩的唯一区别。
preg_grep(string $pattern, array $input[, int flags = 0])
返回匹配模式的数组条目。阉割版本的preg_filter
对一个字符串中的正则表达式的运算符:". \ + * ? [ ] ^ $ ( ) { } = ! < > | : -"进行转义,转义成非正则表达式的运算符,否则正则表达式会认为其为运算符。
preg_quote(string $str[, string $delimiter = null ])
转义正则表达式字符串。返回转义后的字符串。
你可以把正则表达式当做一门简单的语言来看,但是它的语法显然比一般的计算机语言要简单一些。
指定正则表达式的开始和结束,可以当成是计算机语言中的大括号{
和}
。一般有三种表现方式:
/[0-9]/
。这是最常用的方式,在PHP中,推荐使用这种方式。#[0-9]
。{[0-9]}
。在正则表达式中,大括号还有其他作用,所以这种方式不推荐使用。正则表达式中最小的匹配单位,其实就是字符串中的字符。主要分为两大类:
可见原子:
肉眼能够看见的字符。
由于某些字符在正则表达式中属于特殊字符,那么在书写这类特殊字符的时候,应该注意要加上反斜杠\
,例如如果匹配^
直接写/^/
肯定不行,如果加上反斜杠,就可以了。\^
不可见原子:
肉眼看不到的。
\n
\r
\t
。其实就是按一下键盘tab键出来的定义原子的筛选方式,队员原子进行归类,简化正则表达式的书写。
|
匹配两个或者多个分支选择。 和计算机语言中的含义是一样的:或者
[]
匹配方括号中的任意一个原子。[^]
配配除方括号之外的任意字符串。.
匹配除\n
之外的任何单个字符。要匹配包括\n
在内的任何字符,请使用象[.\n]
的模式。\d
十进制数字,等同于[0-9]
\D
匹配任意一个非十进制的数字,等同于[^0-9]
\s
匹配任意一个不可见原子。等同于[\f\n\r\t\v]
\S
匹配一个可见原子。等同于[^\f\n\r\t\v]
\w
匹配任意数字、字母或下划线。既[0-9a-zA-Z_]
\W
匹配任意非数字、字母或下划线。即[^0-9a-zA-Z_]
表示某一个原子连续出现的数量。
{n}
表示前面的原子恰好出现n次{n,}
表示前面的原子最少出现n次{n,m}
表示前面的原子最少出现n此,最多出现m次*
匹配0次、1次、或者多次。等同于{0,}
+
一次或者多次。等同于{1,}
?
0次数或者1次。等同于{0,1}
^
匹配字符串开始的位置。即"必须以……为开头"$
匹配字符串结束的位置。即"必须以……为结尾"将模式单元中的括号及其正则表达式当做是一个原子来看待。
()
匹配其中的整体为一个原子。给正则表达式的匹配过程添加一种匹配模式
U
加U
是懒惰匹配,不加U
是默认的贪婪匹配。i
忽略英文字母大小写。x
忽略空白。(包括空格和按tab键输出的制表符)s
让元字符.
匹配包括换行符在内的所有字符。e
preg_replace()
在替换字符串中对逆向引用作正常的替换。简单的说,就是PHP会把replace的结果当做PHP代码。(替换字符串要符合php的语法规范)
例如:echo preg_replace('/(\d+),(\d+)/e', '$1+$2', '2,3');
会输出5
。书写方式为:
1$pattern = '/hello World/U'
2
3$pattern = '/hello World/i'
4
5$pattern = '/hello World/Ui'//可以任意组合
版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。