php正则怎么使用(最全最细致)

一、总结

一句话总结:

1、正则中的行定位符是什么?

解答:(^与$)

2、正则中什么时候用行定位符?

解答:如"^de",表示以de开头的字符串 "de$",表示以de结尾的字符串。

3、php正则中的单词定界符是什么?

解答:单词定界符\b

4、php正则中单词定界符怎么使用?

解答:要匹配的单词首尾都加。\ban\b 去匹配”gril and body”的话,就会提示匹配不到。

5、php正则中的\B是什么意思?

解答:和\b正好相反,它匹配的字符串不能使一个完整的单词,而是其他单词或字符串中的一部分。如\Ban\B。

6、选择字符(|)和”[]”的区别是什么?

 
解答:区别,在于”[]”只能匹配单个字符,而”|”可以匹配任意长度的字符串。在使用”[]”的时候,往往配合连接字符”-“一起使用,如[a-d],代表a或b或c或d。
 

7、php正则中的排除字符是什么意思?

解答:正则表达式提供了”^”来表示排除不符合的字符,如[^1-5],该字符不是1~5之间的数字。
 

8、php正则中的排除字符一般放在什么括号中?

解答:^一般放在[]中
 

9、php正则中的限定符+和*的区别是什么?

解答:* 零次或多次。 + 一次或多次
 

10、php正则中的点号操作符包括换行符么?

解答:不包含换行符
 

11、php正则中的反斜杠(\)的作用是什么?

解答:转义、指定预定义的字符集、定义断言、显示不打印的字符
 

12、php正则中的括号字符()的作用是什么(两点)?

解答:改变限定符如(|、* 、^)的作用范围 。进行分组,便于反向引用。如(my|your)baby,如果没有”()”,|将匹配的是要么是my,要么是yourbaby,有了小括号,匹配的就是mybaby或yourbaby。

13、php正则中的反向引用是什么意思?

解答:反向引用,就是依靠子表达式的”记忆”功能,匹配连续出现的字串或是字符。如(dqs)(pps)\1\2,表示匹配字符串dqsppsdqspps。
 
 

14、php正则中的模式修饰符有哪四种?

解答:imsx。i 忽略大小写。m 多文本模式。s 单行文本模式。x 忽略空白字符。
 
 

15、php正则中的提供进行正则匹配的函数是?

解答:preg_math()和preg_match_all函数
 

16、php不使用正则如何判断一个字符串中是否包含另一个字符串?

解答:使用strstr或者strpos中任意一个都可以
 

17、php正则中的判断一个字符串中是否包含另一个字符串,需要判断是否存在即可,用什么函数?

解答:preg_match。
 

18、php正则中的判断字符串”I am a good boy”中是否包含单词go 的正则表达式怎么写?

解答:$pattern=’/\bgo\b/’;
 
 

19、php正则中的判断字符串”I am a good boy”中是否包含3个相同的字母 的正则表达式怎么写?

解答:$pattern='/(\w).*\1.*\1/';
 

20、php正则中的反向引用在正则表达式中怎么调用?

解答:反斜杠+组号。例如 $pattern='/(\w).*\1.*\1/';
 

21、php正则中的替换字符串的函数有哪些(四种)?

解答:substr、mb_substr、str_replace、substr_replace
 

22、php中的substr_replace函数是干嘛的?

解答:substr_replace(string,replacement,start,length) 把字符串的一部分替换为另一个字符串。适合用于替换  自定位置   的字符串。
 

23、php正则中的正则替换函数有哪些(两种)?

解答:preg_replace _callback和preg_replace 函数
 

24、php正则去除字符串”gawwenngeeojjgegop”中连续相同的字母 怎么实现?

解答:$str='gawwenngeeojjgegop'; $pattern='/(.)\1/'; $str=preg_replace($pattern,'',$str);

25、php正则 将字符串中”age13gegep3iorji65k65k”;中出现的连续两个数字改为第二个数字,如字符串中13被改为3 怎么实现?

解答:$str='age13gegep3iorji65k65k'; $pattern='/(\d)(\d)/'; $str=preg_replace($pattern,'$2', $str);
 
 

26、php正则中的反向引用的正则表达式外实现 怎么写?

解答:$+组号。例如:$pattern='/(\d)(\d)/'; $str=preg_replace($pattern,'$2', $str);
 

27、php中分割字符串函数是什么?

解答:explode函数。array explode ( string delimiter,stringstring [, int $limit ] )
 

28、php正则中的通过正则表达式进行字符串分割的函数有哪些?

解答:php提供了split、preg_split 函数。preg_split() 函数,通常是比 split() 更快的替代方案。
 

29、php正则 将字符串 ‘http://blog.csdn.net/hsd2012/article/details/51152810‘按照’/’进行分割 怎么实现?

解答:$str='http://blog.csdn.net/hsd2012/article/details/51152810'; $pattern='/\//'; /*因为/为特殊字符,需要转移*/ $str=preg_split ($pattern, $str);
 

30、正则表达式一般都是配合哪些支持正则的函数或者正则函数来实现的。这句话对么?

解答:对
 

31、php正则中的惰性匹配怎么实现?

解答:在 限定词 后面添加一个”?”即可。如m.*?n将匹配manmpndegenc,匹配到的字符串是man。
 
 

32、php正则中的??限定词后加?号是干嘛的?

解答:惰性匹配。表示 0次或1次,但尽可能少的匹配。
 

33、回溯的形象化比喻是什么?

解答:回溯就像是在走岔路口,当遇到岔路的时候就先在每个路口做一个标记。如果走了死路,就可以照原路返回,直到遇见之前所做过的标记,标记着还未尝试过的道路。如果那条路也走不能,可以继续返回,找到下一个标记,如此重复,直到找到出路,或者直到完成所有没有尝试过的路。

 

34、php正则用到的算法实质是什么?

解答:回溯。

 

35、php正则中的 $str='aageacwgewcaw'; $pattern='/a\w*c/i'; $str=preg_match($pattern, $str); 的回溯过程是怎样的呢?

解答:‘a\w*c’中a匹配到’aageacwgewcaw’中第一个字符a。因为\w是贪婪匹配,会一直匹配到’aageacwgewcaw’中最后一个字符w。然后从后往前一个字符一个字符的回溯。

 

36、php正则中的固态分组的作用是什么?

解答:固态分组,目的就是减少回溯次数,

 
 

37、php正则中的固态分组的原理是什么?

解答:使用(?>…)括号中的匹配时如果产生了备选状态,那么一旦离开括号便会被立即 引擎抛弃掉。

 

38、php正则中的固态分组如何实现?

解答:使用(?>…)。$str='nihaoaheloo'; $pattern='/(?>\w+):/'; $rs=preg_match($pattern, $str);

 

39、php正则中的固态分组使用注意是什么(看包含不包含:前后的预定义字符时候包含后面要匹配的字符)?

解答:慎用固态分组。如下,我要检查$str中是否包含以a结尾的字符串,很明显是包含的(\w包含a),但是因为使用了固态分组,反而达不到我们想要的效果。

$str='nihaoahelaa'; $pattern1='/(?>\w+)a/'; $rs=preg_match($pattern1, $str);//0
 
 

40、php中的字符串截取函数是什么?

解答:string substr ( string string,intstart [, int length])stringmbsubstr(stringstr , int start[,intlength = NULL [, string $encoding = mb_internal_encoding() ]] )

 

41、php中的字符串中大小写转换是什么?

解答:strtoupper 。strtolower 。

 

42、php正则中的 字符串比较  函数是什么?

解答:strcmp、strcasecmp、strnatcmp

 

43、php正则中的 字符串随机排序  函数是什么?

解答:string str_shuffle ( string $str )

 

44、php正则中的 邮箱@前的字符匹配正则怎么写(分类思想)?

解答:pattern=′/\w+([−+.]\w+)∗@/’; 

 
 

二、概述

正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的字符串。常用的语言基本上都有正则表达式,如JavaScript、java等。其实,只有了解一种语言的正则使用,其他语言的正则使用起来,就相对简单些。文本主要围绕解决下面问题展开。

  • 有哪些常用的转义字符
  • 什么是限定符与定位符
  • 什么是单词定位符
  • 特殊字符有哪些
  • 什么是逆向引用以及怎样使用逆向引用
  • 匹配模式
  • php中怎样使用正则表达式
  • php中哪些方面需要用到正则
  • 怎样进行邮箱匹配,url匹配,手机匹配
  • 怎样使用正则替换字符串中某些字符
  • 贪婪匹配与惰性匹配区别
  • 正则表达式之回溯与固态分组
  • 正则优缺点有哪些

正则表达式的基本知识汇总

行定位符(^与$)

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

单词定界符

我们在查找的一个单词的时候,如an是否在一个字符串”gril and body”中存在,很明显如果匹配的话,an肯定是可以匹配字符串“gril and body”匹配到,怎样才能让其匹配单词,而不是单词的一部分呢?这时候,我们可以是哟个单词定界符\b。 
\ban\b 去匹配”gril and body”的话,就会提示匹配不到。 
当然还有一个大写的\B,它的意思,和\b正好相反,它匹配的字符串不能使一个完整的单词,而是其他单词或字符串中的一部分。如\Ban\B。

选择字符(|) ,表示或

选择字符表示或的意思。如Aa|aA,表示Aa或者是aA的意思。注意使用”[]”与”|”的区别,在于”[]”只能匹配单个字符,而”|”可以匹配任意长度的字符串。在使用”[]”的时候,往往配合连接字符”-“一起使用,如[a-d],代表a或b或c或d。

排除字符,排除操作

正则表达式提供了”^”来表示排除不符合的字符,^一般放在[]中。如[^1-5],该字符不是1~5之间的数字。

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

限定符主要是用来限定每个字符串出现的次数。

限定字符 含义
零次或一次
* 零次或多次
+ 一次或多次
{n} n次
{n,} 至少n次
{n,m} n到m次

如(D+)表示一个或多个D

点号操作符

匹配任意一个字符(不包含换行符)

表达式中的反斜杠(\)

表达式中的反斜杠有多重意义,如转义、指定预定义的字符集、定义断言、显示不打印的字符。

转义字符

转义字符主要是将一些特殊字符转为普通字符。而这些常用特殊字符有”.”,”?”、”\”等。

指定预定义的字符集

字符 含义
\d 任意一个十进制数字[0-9]
\D 任意一个非十进制数字
\s 任意一个空白字符(空格、换行符、换页符、回车符、字表符)
\S 任意一个非空白字符
\w 任意一个单词字符
\W 任意个非单词字符

显示不可打印的字符

字符 含义
\a 报警
\b 退格
\f 换页
\n 换行
\r 回车
\t 字表符

括号字符()

在正则表达式中小括号的作用主要有:

  • 改变限定符如(|、* 、^)的作用范围 
    如(my|your)baby,如果没有”()”,|将匹配的是要么是my,要么是yourbaby,有了小括号,匹配的就是mybaby或yourbaby。
  • 进行分组,便于反向引用

反向引用

反向引用,就是依靠子表达式的”记忆”功能,匹配连续出现的字串或是字符。如(dqs)(pps)\1\2,表示匹配字符串dqsppsdqspps。在下面php应用中,我将详细展开学习反向引用。

模式修饰符

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

修饰符 说明
i 忽略大小写
m 多文本模式
s 单行文本模式
x 忽略空白字符

正则表达式在php中应用

php中字符串匹配

所谓的字符串匹配,言外之意就是判断一个字符串中,是否包含或是等于另一个字符串。如果不使用正则,我们可以使用php中提供了很多方法进行这样的判断。

不使用正则匹配

  • strstr函数 
    string strstr ( string haystack,mixedneedle [, bool $before_needle = false ])

    • 注1:haystack是当事字符串,needle是被查找的字符串。该函数区分大小写。
    • 注2:返回值是从needle开始到最后。
    • 注3:关于$needle,如果不是字符串,被当作整形来作为字符的序号来使用。
    • 注4:before_needle若为true,则返回前东西。
  • stristr函数与strstr函数相同,只是它不区分大小写
  • strpo函数 
    int strpos ( string haystack,mixedneedle [, int $offset = 0 ] ) 
    注1:可选的 offset 参数可以用来指定从 haystack 中的哪一个字符开始查找。返回的数字位置是相对于 haystack 的起始位置而言的。
  • stripos -查找字符串首次出现的位置(不区分大小定)
  • strrpos -计算指定字符串在目标字符串中最后一次出现的位置
  • strripos -计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写

使用正则进行匹配

在php中,提供了preg_math()和preg_match_all函数进行正则匹配。关于这两个函数原型如下:


int preg_match|preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

搜索subject与pattern给定的正则表达式的一个匹配. 
pattern:要搜索的模式,字符串类型。 
subject :输入字符串。 
matches:如果提供了参数matches,它将被填充为搜索结果。 matches[0]将包含完整模式匹配到的文本,matches[1]将包含第一个捕获子组匹配到的文本,以此类推。 
flags:flags可以被设置为以下标记值:PREG_OFFSET_CAPTURE 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。 注意:这会改变填充到matches参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第1个元素是该匹配字符串 在目标字符串subject中的偏移量。 
offset:通常,搜索从目标字符串的开始位置开始。可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节)。 
返回值:preg_match()返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为 preg_match()在第一次匹配后 将会停止搜索。 preg_match_all()不同于此,它会一直搜索subject直到到达结尾。 如果发生错误 preg_match()返回 FALSE。

实例

实例1 
判断字符串”http://blog.csdn.net/hsd2012“中是否包含csdn? 
解法一(不适用正则): 
如果不适用正则,我们使用strstr或者strpos中任意一个都可以,在此,我将使用strstr函数,代码如下:

$str='http://blog.csdn.net/hsd2012';
function checkStr1($str,$str2)
{
return strstr1($str,$str2)?true:false;
}
echo checkStr($str,'csdn');

解法二:使用正则 
因为我们只需要判断是否存在即可,所以选择preg_match。

$str='http://blog.csdn.net/hsd2012';
$pattern='/csdn/';
function checkStr2($str,$str2)
{
return preg_match($str2,$str)?true:false;
}
echo checkStr2($str,$pattern);

实例2(考察单词定界符) 
判断字符串”I am a good boy”中是否包含单词go 
首先判断是单词,而不是字符串,因此比较的时候,需要比较是否包含’ go ‘,即在字符串go前后有一个空格。 
解析:如果使用非正则比较,只需要调用上面的checkStr1()函数即可,注意,第二个参数前后要加一个空格,即’ go ‘。如果使用正则, 
我们可以考虑使用单词定界符\b,那么$pattern=’/\bgo\b/’;然后调用checkStr2函数即可.

例3(考察反向引用
判断字符串”I am a good boy”中是否包含3个相同的字母 
解析:此时,如果我们不使用正则,将会很难判断,因为字母太多了,我们不可能去将所有字母分别与该字符串比较,那样工作量也比较大。这时候涉及到了正在的反向引用。在php正则表达式中,通过\n,来表示第n次匹配到的结果。如\5代表第五次匹配到的结果。那么本题的$pattern='/(\w).*\1.*\1/';
主要注意的是,在使用反向匹配的时候都需要使用(),反向匹配时,匹配()里面出现的字符或字符串。

php中字符串替换

不使用正则

php中当替换字符串的时候,如果不适用正则,我们通常使用substr、mb_substr、str_replace、substr_replace关于这几个函数区别如下表。

函数符 功能 描述
str_replace(find,replace,string,count) 使用一个字符串替换字符串中的另一些字符。 find 必需。规定要查找的值。replace 必需。规定替换 find 中的值的值。string 必需。规定被搜索的字符串。count 可选。一个变量,对替换数进行计数。
substr_replace(string,replacement,start,length) 把字符串的一部分替换为另一个字符串。适合用于替换自定位置的字符串。 string 必需。规定要检查的字符串。replacement 必需。规定要插入的字符串。start 必需。规定在字符串的何处开始替换。

使用正则

如果使用正则替换,php中提供了preg_replace _callback和preg_replace 函数,preg_replace 原型如下: 
mixed preg_replace ( mixed pattern,mixedreplacement , mixed subject[,intlimit = -1 [, int &count]])函数功能描述:在字符串subject中,查找pattern,然后使用replacement 去替换,如果有limit则代表限制替换limit次。pregreplacecallback与pregreplace功能相识,不同的是pregreplaceback使用一个回调函数callback来代替replacement.−例1将字符串”hello,中国”中的hello替换为′你好′;如果不是用正则:str=’hello,中国’; 
str=strreplace(′hello′,′你好′,str) 
或是使用str=substrreplace(str,’你好’,0,5) 
使用正则 
pattern=′/hello/′;str=preg_replace (pattern,′你好′,str); 
- 例2 
去除字符串”gawwenngeeojjgegop”中连续相同的字母

$str='gawwenngeeojjgegop';
$pattern='/(.)\1/';
$str=preg_replace($pattern,'',$str);

解析:当然这样可能会遇到,当第一次去除了重复了字符串后,又出来重复的字符串。如字符串味’gewwenngeeojjgegop’,针对这中问题,当然,这样的话,通过判断,继续替换下去。

  • 例3 
    将字符串中”age13gegep3iorji65k65k”;中出现的连续两个数字改为第二个数字,如字符串中13被改为3
$str='age13gegep3iorji65k65k';
$pattern='/(\d)(\d)/';
$str=preg_replace($pattern,'$2', $str);

解析:$n在正则表达式外使用反向引用。n代表第几次匹配到的结果。

php中字符串分割

不使用正则

php提供了explode函数去分割字符串,与其对应的是implode。关于explode原型如下: 
array explode ( string delimiter,stringstring [, int $limit ] ) 
delimiter:边界上的分隔字符。 
string:输入的字符串。 
limit:如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。如果 limit 是 0,则会被当做 1。

使用正则

关于通过正则表达式进行字符串分割,php提供了split、preg_split 函数。preg_split() 函数,通常是比 split() 更快的替代方案。 
array preg_split ( string pattern,stringsubject [, int limit=−1[,intflags = 0 ]] )

例题 
将字符串 ‘http://blog.csdn.net/hsd2012/article/details/51152810‘按照’/’进行分割 
解法一:

$str='http://blog.csdn.net/hsd2012/article/details/51152810';
$str=explode('/', $str);

解法二:

$str='http://blog.csdn.net/hsd2012/article/details/51152810';
$pattern='/\//'; /*因为/为特殊字符,需要转移*/
$str=preg_split ($pattern, $str);

php中贪婪匹配与惰性匹配

  • 贪婪匹配:就是匹配尽可能多的字符。 
    比如,正则表达式中m.*n,它将匹配最长以m开始,n结尾的字符串。如果用它来搜索manmpndegenc的话,它将匹配到的字符串是manmpndegen而非man。可以这样想,当匹配到m的时候,它将从后面往前匹配字符n。
  • 懒惰匹配:就是匹配尽可能少的字符。 
    有的时候,我们需要并不是去贪婪匹配,而是尽可能少的去匹配。这时候,就需要将其转为惰性匹配。怎样将一个贪婪匹配转为惰性匹配呢?只需要在其后面添加一个”?”即可。如m.*?n将匹配manmpndegenc,匹配到的字符串是man。
函数符 描述
*? 零次或多次,但尽可能少的匹配
+? 一次或多次,但尽可能少的匹配
?? 0次或1次,但尽可能少的匹配
{n,}? 至少n次,但尽可能少的匹配
{n,m}? n到m次 ,但尽可能少的匹配

php正则表达式之回溯与固态分组

回溯

首先我们需要清楚什么是回溯,回溯就像是在走岔路口,当遇到岔路的时候就先在每个路口做一个标记。如果走了死路,就可以照原路返回,直到遇见之前所做过的标记,标记着还未尝试过的道路。如果那条路也走不能,可以继续返回,找到下一个标记,如此重复,直到找到出路,或者直到完成所有没有尝试过的路。首先我们看例题

$str='aageacwgewcaw';
$pattern='/a\w*c/i';
$str=preg_match($pattern, $str);

看到上面的程序,可能都清楚是什么意思,就是匹配$str是否包含这样一个由”a+0个或多个字母+c”不区分大小写的字符串。但是至于程序怎样去匹配的呢?匹配的过程中,回溯了多少次呢?

匹配过程 接下来操作描述
‘a\w*c’中a匹配到’aageacwgewcaw’中第一个字符a \w进行下一个字符匹配
因为\w是贪婪匹配,会一直匹配到’aageacwgewcaw’中最后一个字符w c进行下一个字符匹配时
‘a\w*c’中c发现没有可以匹配的 于是\w匹配进行第一次回溯,匹配到倒数第二个字符a
‘a\w*c’中c发现还是没有可以匹配的 于是\w匹配进行第二次回溯,匹配到倒数第三个字符c
‘a\w*c’中c匹配成功 匹配结束返回结果

现在,如果我们将pattern改为pattern=’/a\w*?c/i’;又会回溯多少次呢?正确答案是回溯四次。

固态分组

固态分组,目的就是减少回溯次数, 使用(?>…)括号中的匹配时如果产生了备选状态,那么一旦离开括号便会被立即 引擎抛弃掉。举个典型的例子如: ‘\w+:’这个表达式在进行匹配时的流程是这样的,会优先去匹配所有的符合\w的字符,假如字符串的末尾没有’:’,即匹配没有找到冒号,此时触发回溯机制,他会迫使前面的\w+释放字符,并且在交还的字符中重新尝试与’:’作比对。但是问题出现在这里: \w是不包含冒号的,显然无论如何都不会匹配成功,可是依照回溯机制,引擎还是得硬着头皮往前找,这就是对资源的浪费。所以我们就需要避免这种回溯,对此的方法就是将前面匹配到的内容固化,不令其存储备用状态!,那么引擎就会因为没有备用状态可用而只得结束匹配过程。大大减少回溯的次数。 
如下代码,就不会进行回溯:

$str='nihaoaheloo';
$pattern='/(?>\w+):/';
$rs=preg_match($pattern, $str);

当然有的时候,又需慎用固态分组,如下,我要检查$str中是否包含以a结尾的字符串,很明显是包含的,但是因为使用了固态分组,反而达不到我们想要的效果

$str='nihaoahelaa';
$pattern1='/(?>\w+)a/';
$pattern2='/\w+a/';
$rs=preg_match($pattern1, $str);//0
$rs=preg_match($pattern2, $str);//1

php中其他常用字符串操作函数

  • 字符串截取截取 
    string substr ( string string,intstart [, int length])stringmbsubstr(stringstr , int start[,intlength = NULL [, string $encoding = mb_internal_encoding() ]] )
  • 字符串中大小写转换 
    strtoupper 
    strtolower 
    ucfirst 
    ucwords
  • 字符串比较 
    -strcmp、strcasecmp、strnatcmp
  • 字符串过滤
  • 字符串翻转 
    strrev($str);
  • 字符串随机排序 
    string str_shuffle ( string $str )

补充

怎样进行邮箱匹配,url匹配,手机匹配

使用preg_match函数进行匹配,以下内容从TP中复制而来。 
邮箱验证 
pattern=′/\w+([−+.]\w+)∗@\w+([−.]\w+)∗\.\w+([−.]\w+)∗/’; 
url匹配 
pattern='/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(:\d+)?(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?/’; 
手机验证 
pattern=′/1[3458]\d10/’;

php中正则的优缺点

php中正则在某些时候,能帮我们解决php函数很多困难的匹配或是替换。然后php中正则的效率,往往是我们需要考虑的,所以在某些时候,能不用正则还是尽量不去用它,除非,某些场合必须用到,或是我们能够有效减少其回溯次数。

 

三、测试题-简答题

1、正则中的行定位符是什么?

解答:(^与$)

2、正则中什么时候用行定位符?

解答:如"^de",表示以de开头的字符串 "de$",表示以de结尾的字符串。

3、php正则中的单词定界符是什么?

解答:单词定界符\b

4、php正则中单词定界符怎么使用?

解答:要匹配的单词首尾都加。\ban\b 去匹配”gril and body”的话,就会提示匹配不到。

5、php正则中的\B是什么意思?

解答:和\b正好相反,它匹配的字符串不能使一个完整的单词,而是其他单词或字符串中的一部分。如\Ban\B。

6、选择字符(|)和”[]”的区别是什么?

 
解答:区别,在于”[]”只能匹配单个字符,而”|”可以匹配任意长度的字符串。在使用”[]”的时候,往往配合连接字符”-“一起使用,如[a-d],代表a或b或c或d。
 

7、php正则中的排除字符是什么意思?

解答:正则表达式提供了”^”来表示排除不符合的字符,如[^1-5],该字符不是1~5之间的数字。
 

8、php正则中的排除字符一般放在什么括号中?

解答:^一般放在[]中
 

9、php正则中的限定符+和*的区别是什么?

解答:* 零次或多次。 + 一次或多次
 

10、php正则中的点号操作符包括换行符么?

解答:不包含换行符
 

11、php正则中的反斜杠(\)的作用是什么?

解答:转义、指定预定义的字符集、定义断言、显示不打印的字符
 

12、php正则中的括号字符()的作用是什么(两点)?

解答:改变限定符如(|、* 、^)的作用范围 。进行分组,便于反向引用。如(my|your)baby,如果没有”()”,|将匹配的是要么是my,要么是yourbaby,有了小括号,匹配的就是mybaby或yourbaby。

13、php正则中的反向引用是什么意思?

解答:反向引用,就是依靠子表达式的”记忆”功能,匹配连续出现的字串或是字符。如(dqs)(pps)\1\2,表示匹配字符串dqsppsdqspps。
 
 

14、php正则中的模式修饰符有哪四种?

解答:imsx。i 忽略大小写。m 多文本模式。s 单行文本模式。x 忽略空白字符。
 
 

15、php正则中的提供进行正则匹配的函数是?

解答:preg_math()和preg_match_all函数
 

16、php不使用正则如何判断一个字符串中是否包含另一个字符串?

解答:使用strstr或者strpos中任意一个都可以
 

17、php正则中的判断一个字符串中是否包含另一个字符串,需要判断是否存在即可,用什么函数?

解答:preg_match。
 

18、php正则中的判断字符串”I am a good boy”中是否包含单词go 的正则表达式怎么写?

解答:$pattern=’/\bgo\b/’;
 
 

19、php正则中的判断字符串”I am a good boy”中是否包含3个相同的字母 的正则表达式怎么写?

解答:$pattern='/(\w).*\1.*\1/';
 

20、php正则中的反向引用在正则表达式中怎么调用?

解答:反斜杠+组号。例如 $pattern='/(\w).*\1.*\1/';
 

21、php正则中的替换字符串的函数有哪些(四种)?

解答:substr、mb_substr、str_replace、substr_replace
 

22、php中的substr_replace函数是干嘛的?

解答:substr_replace(string,replacement,start,length) 把字符串的一部分替换为另一个字符串。适合用于替换  自定位置   的字符串。
 

23、php正则中的正则替换函数有哪些(两种)?

解答:preg_replace _callback和preg_replace 函数
 

24、php正则去除字符串”gawwenngeeojjgegop”中连续相同的字母 怎么实现?

解答:$str='gawwenngeeojjgegop'; $pattern='/(.)\1/'; $str=preg_replace($pattern,'',$str);

25、php正则 将字符串中”age13gegep3iorji65k65k”;中出现的连续两个数字改为第二个数字,如字符串中13被改为3 怎么实现?

解答:$str='age13gegep3iorji65k65k'; $pattern='/(\d)(\d)/'; $str=preg_replace($pattern,'$2', $str);
 
 

26、php正则中的反向引用的正则表达式外实现 怎么写?

解答:$+组号。例如:$pattern='/(\d)(\d)/'; $str=preg_replace($pattern,'$2', $str);
 

27、php中分割字符串函数是什么?

解答:explode函数。array explode ( string delimiter,stringstring [, int $limit ] )
 

28、php正则中的通过正则表达式进行字符串分割的函数有哪些?

解答:php提供了split、preg_split 函数。preg_split() 函数,通常是比 split() 更快的替代方案。
 

29、php正则 将字符串 ‘http://blog.csdn.net/hsd2012/article/details/51152810‘按照’/’进行分割 怎么实现?

解答:$str='http://blog.csdn.net/hsd2012/article/details/51152810'; $pattern='/\//'; /*因为/为特殊字符,需要转移*/ $str=preg_split ($pattern, $str);
 

30、正则表达式一般都是配合哪些支持正则的函数或者正则函数来实现的。这句话对么?

解答:对
 

31、php正则中的惰性匹配怎么实现?

解答:在 限定词 后面添加一个”?”即可。如m.*?n将匹配manmpndegenc,匹配到的字符串是man。
 
 

32、php正则中的??限定词后加?号是干嘛的?

解答:惰性匹配。表示 0次或1次,但尽可能少的匹配。
 

33、回溯的形象化比喻是什么?

解答:回溯就像是在走岔路口,当遇到岔路的时候就先在每个路口做一个标记。如果走了死路,就可以照原路返回,直到遇见之前所做过的标记,标记着还未尝试过的道路。如果那条路也走不能,可以继续返回,找到下一个标记,如此重复,直到找到出路,或者直到完成所有没有尝试过的路。

 

34、php正则用到的算法实质是什么?

解答:回溯。

 

35、php正则中的 $str='aageacwgewcaw'; $pattern='/a\w*c/i'; $str=preg_match($pattern, $str); 的回溯过程是怎样的呢?

解答:‘a\w*c’中a匹配到’aageacwgewcaw’中第一个字符a。因为\w是贪婪匹配,会一直匹配到’aageacwgewcaw’中最后一个字符w。然后从后往前一个字符一个字符的回溯。

 

36、php正则中的固态分组的作用是什么?

解答:固态分组,目的就是减少回溯次数,

 
 

37、php正则中的固态分组的原理是什么?

解答:使用(?>…)括号中的匹配时如果产生了备选状态,那么一旦离开括号便会被立即 引擎抛弃掉。

 

38、php正则中的固态分组如何实现?

解答:使用(?>…)。$str='nihaoaheloo'; $pattern='/(?>\w+):/'; $rs=preg_match($pattern, $str);

 

39、php正则中的固态分组使用注意是什么(看包含不包含:前后的预定义字符时候包含后面要匹配的字符)?

解答:慎用固态分组。如下,我要检查$str中是否包含以a结尾的字符串,很明显是包含的(\w包含a),但是因为使用了固态分组,反而达不到我们想要的效果。

$str='nihaoahelaa'; $pattern1='/(?>\w+)a/'; $rs=preg_match($pattern1, $str);//0
 
 

40、php中的字符串截取函数是什么?

解答:string substr ( string string,intstart [, int length])stringmbsubstr(stringstr , int start[,intlength = NULL [, string $encoding = mb_internal_encoding() ]] )

 

41、php中的字符串中大小写转换是什么?

解答:strtoupper 。strtolower 。

 

42、php正则中的 字符串比较  函数是什么?

解答:strcmp、strcasecmp、strnatcmp

 

43、php正则中的 字符串随机排序  函数是什么?

解答:string str_shuffle ( string $str )

 

44、php正则中的 邮箱@前的字符匹配正则怎么写(分类思想)?

解答:pattern=′/\w+([−+.]\w+)∗@/’;

 
 
 
 
 
 
 
 
 

php正则怎么使用(最全最细致)的更多相关文章

  1. 苹果搜索广告后台大揭秘,最全最细致详解,手把手设置教程「后附官方视频」-b

    WWDC2016 搜索广告分会视频和 PPT 发布了,ASO100 带开发者第一时间了解 Search Ads 后台设置(文末有原声视频). 首先介绍一下搜索广告的模式和竞价规则 广告模式为 CPT( ...

  2. C#正则验证字符串是否全是数字

    Regex r = new Regex(@"^\d+$"); if (r.Match(vlannumber).Success) { sql += " and a.vlan ...

  3. elasticsearch要点及常用查询

    目录 elasticsearch要点及常用查询 查询与过滤 明确查询和过滤各自的优缺点,以及适用场景. 性能上的差异 适用场景 1.kibana 中操作es-查询 Mapping映射基础 mappin ...

  4. js-FCC算法-No repeats please字符串的全排列

    把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准 例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, aba ...

  5. struts2中的ognl详解,摘抄

    http://blog.csdn.net/tjcyjd/article/details/6850203     很全很细致,自己再分析原理进阶

  6. so easy, too happy

    一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 • Estimate • 估计这个任务需要多 ...

  7. 关于CSRF的那点事儿

    0x01 CSRF简介     CSRF,也称XSRF,即跨站请求伪造攻击,与XSS相似,但与XSS相比更难防范,是一种广泛存在于网站中的安全漏洞,经常与XSS一起配合攻击. 0x02 CSRF原理 ...

  8. mac下iterm2快捷方式

    mac下iterm2,一些技巧,做个记录,大部分参考别人的加上自己的补充: 其中option + 左右键来跳转单词还是有问题,结果变为[D[C,等我摸索好了再来补充. 窗口 新建tab:⌘ + t 切 ...

  9. perl6中的替换

    use v6; =begin pod perl6 中的替换用S/// S有几个可选参数: :g —(长形式::global)全局匹配:替换掉所有的出现 :i —不区分大小写的匹配 :ii —(长形式: ...

随机推荐

  1. windows下使用cpanm进行模块安装

    windows下使用cpanm进行模块安装 要放假了,突然想整理一下手头上的软件,突然发现perl的安装模块这个功能不能用. 弄了一下,使得windows 下 perl 的 cpanm能用,避免成天为 ...

  2. 00099_commons-IO

    1.导入classpath (1)加入classpath的第三方jar包内的class文件才能在项目中使用: (2)创建lib文件夹: (3)将commons-io.jar拷贝到lib文件夹: (4) ...

  3. 黑马day01 xml 的解析方式

    XML编程:利用java程序去增删改查(CRUD)xml中的数据 解析思想: dom解析 sax解析 基于这两种解析思想市面上就有了非常多的解析api sun jaxp既有dom方式也有sax方式,而 ...

  4. DB2 概览

    2006:IBM公布DB2.9.将数据库领域带入XML时代.IT建设业已进入SOA(Service-Oriented Architecture)时代.实现SOA.其核心难点是顺畅解决不同应用间的数据交 ...

  5. 2017.1-TOP5 Android开源库

    Colorful (Github) Colorful简单实用,通过这个开源库可以通过编码的方式来改变应用的主题,不再需要定义不同的style dependencies { compile 'com.g ...

  6. Altium Designer中死铜的问题

  7. JS学习笔记 - 封装getPosition函数、一串跟着鼠标的div

    function getPosition(ev) { var scrollTop = document.documentElement.scrollTop || document.body.scrol ...

  8. HTTP详解--请求、响应、缓存

    1. HTTP请求格式 做过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干.HTTP协议传输的消息 ...

  9. 【例题 6-12 UVA - 572 】Oil Deposits

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] dfs.. [代码] #include <bits/stdc++.h> using namespace std; con ...

  10. 【MemSQL Start[c]UP 3.0 - Round 1 B】 Lazy Security Guard

    [链接]h在这里写链接 [题意] 围成对应面积的方块最少需要多少条边. [题解] 有特定的公式的. 2*ceil(2*根号下(n)); -> 自己找下规律也很简单的. [错的次数] 0 [反思] ...