php正则最多n次包含n,php 正则表达式(Regular Expression)用法

文章收藏了关于php 正则表达式用法与常用的正则表达式规则与实例,有需要的同学可以参考一下本文章。

正则表达式(Regular Expression)

正则表达式系统:

1.POSIX

2.Perl

PHP中使用的regex是PCRE:

NOTE:PCRE(Perl兼容正则表达式,Perl Compatible Regular Expressions)

PCRE语法:

1.定界符

必须成对出现,可以使用除0-9a-zA-Z以外的任何字符

2.原子

1.正则需要匹配的可见和不可见字符都是原子

2.一个正则表达式最少含有一个原子

3.当需要匹配诸如"("、"["、"^"等含有语义的符号时需要用""反斜线进行转义

原子字符:

f 匹配换页符

n 匹配换行符

r 匹配回车符

t 匹配制表符

v 匹配垂直制表符

3.元字符

转义字符

^ 匹配字符串起始处

$ 匹配字符串末尾

. 匹配除"n"之外的任何单个字符

* 匹配前面的子表达式0或多次

匹配前面的子表达式1次或多次

? 匹配前面的子表达式0次或1次

{n} 匹配n次

{n,} 匹配n次或n次以上

{n,m} 最少匹配n次至多匹配m次,(n<=m)

[] 中括号代表原子表,中间的原子地位都是相等。在匹配的时候,匹配表中的任意一个字符

[^] 抑扬符,排除后面的原子表所包含的字符。

(pattern) 匹配pattern并获取这一匹配。

num 对获取的第num个匹配的引用。

(?:pattern) 匹配pattern但不获取这一匹配

(?=pattern) 正向肯定预查,非获取匹配,例如:windows(?=XP|7)能匹配windowsXP中的windows不能匹配windows98中的windows

(?!=pattern) 正向否定欲查非获取匹配,例如:windows(?!98|2000),能匹配windowsXP中的windows,不能匹配windows98中的windows

(?<=pattern) 反向肯定预查,非获取匹配。例如:(?<=My|Postgre)SQL能匹配MySQL中的SQL,不能匹配MSSQL中的SQL

(?

b 匹配单词边界

B 匹配除单词边界以外的字符

d 匹配任何一个数字。等价于[0-9]

D 匹配任何一个非数字以外的字符。等价于[^0-9]

s 匹配任何一个空白字符(包括空格、制表符、换页符等)。等价于[fnrtv]

S 匹配任何一个非空白字符。等价于[^fnrtv]

w 匹配任何一个数字、字母或下划线。等价于[0-9a-zA-Z]

W 匹配任何一个非数字、字母或下划线的字符。等价于[^0-9a-zA-Z]

4.模式修正符

i 不区分大小写

m 此模式中如果有回车或换行,^和$将匹配每行的行首和行尾

s 让.能匹配n

x 忽略空白

U 取消贪婪,相当于(.*?)

A 与^效果一样

D 结尾处不忽略回车  ,在结束处有$符的时候,在匹配的字符串后面加上回车,$依然能够匹配它成功。但是加上D之后,结尾的回车,不再匹配

NOTE:正则表达式是从左向右进行匹配的

常用的正则表达式

1、非负整数:”^d $”

2、正整数:”^[0-9]*[1-9][0-9]*$”

3、非正整数:”^((-d )|(0 ))$”

4、负整数:”^-[0-9]*[1-9][0-9]*$”

5、整数:”^-?d $”

6、非负浮点数:”^d (.d )?$”

7、正浮点数:”^((0-9) .[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9] )|([0-9]*[1-9][0-9]*))$”

8、非正浮点数:”^((-d .d )?)|(0 (.0 )?))$”

9、负浮点数:”^(-((正浮点数正则式)))$”

10、英文字符串:”^[A-Za-z] $”

11、英文大写串:”^[A-Z] $”

12、英文小写串:”^[a-z] $”

13、英文字符数字串:”^[A-Za-z0-9] $”

14、英数字加下划线串:”^w $”

15、E-mail地址:”^[w-] (.[w-] )*@[w-] (.[w-] ) $”

16、URL:”^[a-zA-Z] ://(w (-w )*)(.(w (-w )*))*(?s*)?$”

下面这个用PHP写的函数,可以获取任意的字符串$string中的所有链接地址($string可以是从一个HTML页面文件直接读取出来的字符串),结果保存在一个数组中返回.该函数自动把电子邮件地址排除在外,而且返回的数组中不会有重复元素.

 代码如下复制代码

function GetAllLink($string)

{

$string = str_replace("r","",$string);

$string = str_replace("n","",$string);

$regex[url] = "((http|htt\3t", $string);

$output[0] = strtok($string, "t");

while(($temp = strtok("t")))

{

if($temp && !in_array($temp, $output))

$output[ $i] = $temp;

}

return $output;

}

以下是以PHP的语法所写的示例

验证字符串是否只含数字与英文,字符串长度并在4~16个字符之间

 代码如下复制代码

echo "验证成功";} else {

echo "验证失??quot;;}?>

简易的台湾身分证字号验证

 代码如下复制代码

$str = 'a1234';

if (preg_match("^(?:d{15}|d{18})$", $str)) {

echo "验证成功";

} else {

echo "验证失??quot;;}

?>

下面的代码实现文字中的代码块,功能就如你在脚本之家看到的代码一样。

 代码如下复制代码

function codedisp($code) {

global $discuzcodes;

$discuzcodes['pcodecount'] ;

$code = htmlspecialchars(str_replace('\"', '"', preg_replace("/^[nr]*(. ?)[nr]*$/is", "\1", $code)));

$discuzcodes['codehtml'][$discuzcodes['pcodecount']] = "

代码如下:
".fhtml2($code)."

";

$discuzcodes['codecount'] ;

return "[tDISCUZ_CODE_$discuzcodes[pcodecount]t]";

}

$message = preg_replace("/s*[code](. ?)[/code]s*/ies", "codedisp('\1')", $message);

$message = preg_replace("/s*[html](. ?)[/html]s*/ies", "htmldisp('\1')", $message);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值