热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php正则表达式(RegularExpression)用法-PHP源码

文章收藏了关于php正则表达式用法与常用的正则表达式规则与实例,有需要的同学可以参考一下本文章。
文章收藏了关于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|https|ftp|telnet|news)://)?([a-z0-9_-/.]+.[][a-z0-9:;&#@=_~%?/.,+-]+)";
$regex[email] = "([a-z0-9_-]+)@([a-z0-9_-]+.[a-z0-9-._-]+)";

//去掉标签之间的文字
$string = eregi_replace(">[^<>]+<","><", $string);

//去掉Javascript代码
$string = eregi_replace("","", $string);

//去掉非的HTML标签

代码如下

$string = eregi_replace("<[^a][^<>]*>","", $string);

//去掉EMAIL链接
$string = eregi_replace("]*>","", $string);

//替换需要的网页链接
$string = eregi_replace("]*>","\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个字符之间

代码如下

$str = 'a1234';
if (preg_match("^[a-zA-Z0-9]{4,16}$", $str)) {
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);


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 数据库(外键及其约束理解)(https:www.cnblogs.comchenxiaoheip6909318.html)My ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • yum安装_Redis —yum安装全过程
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Redis—yum安装全过程相关的知识,希望对你有一定的参考价值。访问https://redi ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 有关phpfgetss()函数的文章推荐10篇
    有关phpfgetss()函数的文章推荐10篇:了解如何使用PHP的各种文件函数。查看诸如fopen、fclose和feof之类的基本文件函数;了解诸如fgets、fgetss和f ... [详细]
author-avatar
嗷唔喵_105
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有