搜档网
当前位置:搜档网 › 真正意义上的过滤多余换行符仅留一行的php正则表达式

真正意义上的过滤多余换行符仅留一行的php正则表达式

真正意义上的过滤多余换行符仅留一行的php正则表达式

欢迎登录清源教育官网https://www.sodocs.net/doc/f07933115.html,查看更多视频教程

真正意义上的过滤多余换行符仅留一行的php正则表达式

本文主要是讲一个过滤html或其他文本中多余换行,并保留其原有缩进规则的php正则表达式,这段表达式是我在做现有的我的博客中外链自助功能中网站快照用到的,目的就是过滤掉文本中多余的换行,让文件更小更规范,并且可以让数据库更小。我因为是在做一个网站的时候做的这个功能,因为是美工扒的别人的网站,但是里面有大量的多余换行,原来文件有8000多行,过滤后只有900多行,并且保持了代码的缩进。

其实这个正则表达式就是为了规范简化代码用的,用他过滤后可以保证代码的缩进和层次规则,并且能够正常的运行,而过滤掉多余的换行,让代码执行更快,也让文件更小。这个表达式的原理很简单,弄的我还各种百度、谷歌,但是发现网上的都是些不好用的正则,要么是把所有空白符都替换了,让整个代码成了一行,要么就是根本不起作用,达不到优化代码的目的,后来还是查手册吧,正则看似复杂,其实只要你先考虑清楚要怎么匹配字符,只要这个考虑清楚,就可以通过手册组合你的构思就可以了。

那么这个正则的原理就是匹配“以换行符结尾的所有空白字符”,因为换行符也属于空白字符,那么这样就会留下换行符后面有其他非空白字符的字符,而把所有不是以换行符结尾的空白字符都替换为空。代码就是:

preg_replace(“/\s+\r/”,”", $file);

可以利用这个功能,做个优化代码文件的小功能,将代码读入,然后过滤一下,再写入。或者是在做网站之前,先用这个功能,将美工给的模板代码等优化一下。是不是很好用啊。

正则是个很牛叉的东东,好好学习,可以让你的思维增加很多出路!

来源:清源教育

php的正则表达式完全手册

php的正则表达式完全手册 前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题。 索引 1._引子 2._正则表达式的历史 3._正则表达式定义 3.1_普通字符 3.2_非打印字符 3.3_特殊字符 3.4_限定符 3.5_定位符 3.6_选择 3.7_后向引用 4._各种操作符的运算优先级 5._全部符号解释 6._部分例子 7._正则表达式匹配规则 7.1_基本模式匹配 7.2_字符簇 7.3_确定重复出现 1. 引子 目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。 正则表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努力才行,入门之后参照一定的参考,使用起来还是比较简单有效的。 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过。可能很多人也是被这样的代码给吓跑的吧。继续阅读本文将让你也可以自由应用这样的代码。 注意:这里的第7部分跟前面的内容看起来似乎有些重复,目的是把前面表格里的部分重新描述了一次,目的是让这些内容更容易理解。 2. 正则表达式的历史 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。 随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。 如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。 3. 正则表达式定义 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

PHP开发笔试题

PHP基础测试 (答题时间:90分钟总分100分) 一、选择题(共40道每道2分) 1. 阅读下面php代码,并选择正确的输出结果(): a)314 b)0 c)100 d) 3.14 2. PHP支持八种原始类型,其中下面哪个()不属于四种标量类型。 a)boolean(布尔型) b)integer(整型) c)array(数组) d)string(字符串) 3. PHP中的变量用一个美元符号后面跟变量名来表示,那么下面变量名定义错误的是()。 a)$name123 b)$_age c)$8n d)$_234 4. 阅读下面php代码,并选择正确的输出结果。 20,"y"=>30,40,2=>50,60); echo $a[0].":".$a[1].":".$a[3]; ?> a)40::60 b)40:50:60 c)40:60: d)40:: 5. 下面哪个函数是计算数组中的单元数目或对象中的属性个数。 a)sum() b)arraySize() c)length( ) d)count( )

6. 下面关于正则表达式的函数描述错误的是(); a)preg_replace -- 执行正则表达式的搜索和替换 b)preg_match -- 进行正则表达式匹配 c)preg_replace -- 执行正则表达式的搜索和替换 d)preg_split -- 用正则表达式拼装字符串 7. 在PHP中,字符串的定义方式有三种,下面哪个不是字符串的定义方式。 a)单引号‘’ b)双引号“” c)定界符<<< d)字串函数string( ) 8. 阅读下面PHP程序代码,并选择正确结果: a)bcdef bcd b)abcdef bcd c)bcdef abc d)abcdef abc 9. 在PHP中date()函数是格式化一个本地时间和日期函数,下面对格式化字串描述错误的是: a)Y:4 位数字完整表示的年份 b)m:数字表示的月份,有前导零 c)d:月份中的第几天,有前导零的 2 位数字 d)H:小时,12 小时格式,有前导零 10. 在PHP中fopen( )函数是打开文件或者URL地址,其中对打开模式描述错误的是(): a)'r':只读方式打开,将文件指针指向文件头。 b)'w':写入方式打开,将文件指针指向文件头并将文件大小截为零。如果 文件不存在则尝试创建之。 c)'a+':写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝 试创建之。 d)'x':建并以写入方式打开,将文件指针指向文件头。如果文件已存在, 则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错 误信息。 11. 以下关于key()和current()函数的叙述,请找出正确的答案:()。 a)key()函数用来读取目前指针所指向资料的索引值 b)key()函数是取得目前指针位置的内容资料

PHP 常用正则表达式 正则

PHP 常用正则表达式正则 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:"^\d+$"//非负整数(正整数+ 0) "^[0-9]*[1-9][0-9]*$"//正整数 "^((-\d+)|(0+))$"//非正整数(负整数+ 0) "^-[0-9]*[1-9][0-9]*$"//负整数 "^-?\d+$"//整数 "^\d+(\.\d+)?$"//非负浮点数(正浮点数+ 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"//正浮点数"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"//非正浮点数(负浮点数+ 0) "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"//负浮点数 "^(-?\d+)(\.\d+)?$"//浮点数 "^[A-Za-z]+$"//由26个英文字母组成的字符串 "^[A-Z]+$"//由26个英文字母的大写组成的字符串 "^[a-z]+$"//由26个英文字母的小写组成的字符串 "^[A-Za-z0-9]+$"//由数字和26个英文字母组成的字符串 "^\w+$"//由数字、26个英文字母或者下划线组成的字符串 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"//email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"//url /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码 "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}| 1dd|2[0-4]d|25[0-5])$" //IP地址 匹配中文字符的正则表达式:[\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 元字符及其在正则表达式上下文中的行为: \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转

PHP中的正则函数

PHP正则表达式:PHP中的正则函数 【简介】 PHP正则表达式主要用于字符串的模式分割、匹配、查找及替换操作。使用正则表达式在某些简单的环境下可能效率不高,因此如何更好的使用PHP正则表达式需要综合考虑。 PHP正则表达式主要用于字符串的模式分割、匹配、查找及替换操作。使用正则表达式在某些简单的环境下可能效率不高,因此如何更好的使用PHP正则表达式需要综合考虑。 我的PHP正则入门,是起源于网上的一篇文章,这篇文章由浅入深的阐述了PHP正则表达式使用的方法,我觉得是一个很好的入门材料,不过学成还是要靠个人,在使用的过程中,还是会不断地忘记,因此反反复复的阅读了这篇文章有四五遍,对于其中一些比较困难的知识点,甚至要用很久才能消化,但是只要能见坚持着看完,你会发现自己对于正则的运用能力就会显著提高。 PHP正则表达式的定义: 用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。 PHP中的正则函数: PHP中有两套正则函数,两者功能差不多,分别为: 一套是由PCRE(Perl Compatible Regular Expression)库提供的。使用“preg_”为前缀命名的函数; 一套由POSIX(Portable Operating System Interface of Unix)扩展提供的。使用以“ereg_”为前缀命名的函数;(POSIX的正则函数库,自PHP5.3以后,就不在推荐使用,从PHP6以后,就将被移除) 由于POSIX正则即将推出历史舞台,并且PCRE和perl的形式差不多,更利于我们在perl 和php之间切换,所以这里重点介绍PCRE正则的使用。 PCRE正则表达式 PCRE全称为Perl Compatible Regular Expression,意思是Perl兼容正则表达式。 在PCRE中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/apple/”。 正则中重要的几个概念有:元字符、转义、模式单元(重复)、反义、引用和断言,这些概念都可以在文章[1]中轻松的理解和掌握。 常用的元字符(Meta-character):

几种PHP提取字符串中的数字

第一种方法,使用正则表达式: function findNum($str=''){ $str=trim($str); if(empty($str)){return '';} $reg='/(\d{3}(\.\d+)?)/is';//匹配数字的正则表达式 preg_match_all($reg,$str,$result); if(is_array($result)&&!empty($result)&&!empty($result[1])&&!empty($result[1][0])){ return $result[1][0]; } return ''; } 第二种方法,使用in_array方法: function findNum($str=''){ $str=trim($str); if(empty($str)){return '';} $temp=array('1','2','3','4','5','6','7','8','9','0'); $result=''; for($i=0;$i

PHP正则表达式二徐枭雄课堂笔记

正则表达式 1.什么是正则表达式 a)例子:’//’;这就是正则表达 式 b)乱七八糟的一堆字符堆砌在一起,神秘的符号,有着 奇特的意义 2.和正则表达式相识的事物? a)乱/看不懂/神秘/意义 医生的字只有医院的人能看懂 道士的符只有道士明白 女人的心只有女人能懂 正则表达式只有程序员能看懂(所有的高级语言中都有正则表达式) 3.学习正则表达式可以做什么、 a)操作字符串时正则表达式的唯一作用 验证用户名长度是否合法 验证密码是否符合标准 验证手机号 验证URL地址 验证邮箱

BBS编辑器 Qq聊天表情 新闻采集器小偷程序 4.看看正则表达式的一些特点 a)1.正则表达式也是一个字符串 b)2.由特殊意义的字符组成的字符串 c) 3.具有一定的编写规则,也是一种模式 d)4.看做是一种编程语言 因为是用一些特殊字,按照规则编写出来的字符串,形成一种模式-正则表达式。 注意:如果正则表达式,不和函数一起使用,则他就是一个普通的字符串而已。如果把正则表达式放入到函数中一起使用,才能发挥出正则表达式的作用。 比如:将正则表达式放入到分分隔函数,哪可以用这个正则表达式去分隔字符串。 总结:正则弊端是就是通过构建具有特定规则的模式了,在于输入的字符串信息进行比较,分隔,查找,替换等工作。 在实际应用中记住一点:能使用字符串处理函数来完成的就不要使用正则表达式来完成。愿意:效率低。

5.PHP中提供了两套正则表达式函数库 a)Posix 扩展正则表达式函数-》ereg b)Perl 兼容正则表达式函数->preg (两套函数库功能一样,但是perl效率高,所以官方推荐使用perl) 6.学习正则表达式时,有两方面学习 a)1.正则表达式的模式如何编写 b)2.学习正则表达式的强大处理函数 7.正则表达式的语法(分4部) a)1.正则定界符 b)2.正则表达式中的原子 c) 3.正则表达式中的元字符(原子修正符) d)4.正则表达式的模式修正符 8.正则表达式的定界符 a)正则表达式的定界符是用来声明正则表达式的边界符 号。 正则表达式常用个的边界符是’/‘实际上任何非数字字

正则表达式

正则表达式
目录
1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在 C 语言中使用正则表达式
1. 引言
以前我们用 grep 在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义. 其实 grep 还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合 xxxxx@xxxx.xxx 模式的字符串(也就是 email 地址),要求 x 字符可以是字母,数字,下划 线,小数点或减号,email 地址的每一部分可以有一个或多个 x 字符,例如 abc.d@https://www.sodocs.net/doc/f07933115.html,, 1_2@987-6.54,当然符合这个模式的不全是合法的 email 地址,但至少可以做一次初步筛选, 筛掉 a.b,c@d 等肯定不是 email 地址的字符串.再比如,找出所有符合 yyy.yyy.yyy.yyy 模 式的字符串(也就是 IP 地址),要求 y 是 0-9 的数字,IP 地址的每一部分可以有 1-3 个 y 字 符. 如果要用 grep 查找一个模式,如何表示这个模式,这一类字符串,而不是一个特定的字符串 呢?从这两个简单的例子可以看出,要表示一个模式至少应该包含以下信息: 字符类(Character Class):如上例的 x 和 y,它们在模式中表示一个字符,但是取 值范围是一类字符中的任意一个. 数量限定符(Quantifier): 邮件地址的每一部分可以有一个或多个 x 字符,IP 地址 的每一部分可以有 1-3 个 y 字符 各种字符类以及普通字符之间的位置关系:例如邮件地址分三部分,用普通字符@和. 隔开,IP 地址分四部分,用.隔开,每一部分都可以用字符类和数量限定符描述.为 了表示位置关系,还有位置限定符(Anchor)的概念,将在下面介绍.
规定一些特殊语法表示字符类,数量限定符和位置关系,然后用这些特殊语法和普通字符一 起表示一个模式,这就是正则表达式(Regular Expression).例如 email 地址的正则表达式 可以写成[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+,IP 地址的正则表达式可以 写成[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.下一节介绍正则表达式的语法, 我们先看看正则表达式在 grep 中怎么用.例如有这样一个文本文件 testfile:
192.168.1.1
第 1 页 共 10 页

php正则验证中文

一、利用正则表达式验证中文 注意UTF8编码和GB2312有所不同。 1.UTF8下的中文验证 $str1 = "编程"; $str = "php编程"; if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) { print("该字符串全部是中文"); } else { print("该字符串不全部是中文"); } 2.GB2312下中文的验证 if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $st_name){ print("该字符串全部是中文"); } else { print("该字符串不全部是中文"); } PHP中用正则表达式验证中文的有以下问题需注意 例如: str = '中华人民共和国123456789abcdefg'; echo preg_match("/^[\u4e00-\u9fa5_a-zA-Z0-9]{3,15}",strName); 运行一下上面这段代码,看会有什么提示信息? Warning: preg_match(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 3 in F:\wwwroot\php\test.php on line 2 原来,PHP正则表达式中不支持下列 Perl 转义序列:\L, \l, \N, \P, \p, \U, \u, or \X 在 UTF-8 模式下,允许用“\x{...}”,花括号中的内容是表示十六进制数字的字符串。原来的十六进制转义序列 \xhh 如果其值大于 127 的话则匹配了一个双字节 UTF-8 字符。 所以,可以这样来解决 preg_match("/^[\x80-\xff_a-zA-Z0-9]{3,15}",strName); 一开始很是疑惑\x80-\xff只能匹配128个字符怎么就可以匹配成千上万的中文呢,原来\x80-\xff只是匹配中文双字节中的一个字节, 所以上面的正则表达式可以匹配范围是128*128个双字节字符。

PHP正则表达式&字符串处理

第四课:正则表达式&字符串处理 程序原理:处理数据(Web上的数据) 数据:类型字符串是程序中的一种最基本的类型 serialize 正则就是处理字符串的一种方式 处理字符串:查找、替换、删除、匹配、分割 1、正则表达式简介 正则表达式介绍 正则表达式:Regular Expression,是用于描述字符排列模式的一种语法规则。正则表达式是查找和替换、切割字符串模式的简洁和灵活的表示方法。 正则表达式的用途: 在unix(linux)系统中,可以在编辑器中使用正则表达式实现对字符的搜索及处理;各种编程语言(c/c++,perl,java,javascript)也可以使用正则表达式实现对字符的模式分割、匹配、查找及替换操作。 正则表达式早期仅用于Unix系统程序,现在已被绝大多数系统、程序所支持。 PHP支持两种风格的正则表达式函数:一种是由PCRE(Perl Compatible Regular Expression)库提供的;另一种是由POSIX(Portable Operation System Implementation for unix,UNIX可移植操作系统实现接口)扩展库提供的。前者使用以“preg_”为前缀命名的函数;后者使用以“ereg_”为前缀命名的函数。两者功能相似,只是执行效率略有差异。PERL库的函数(preg_)执行效率略高。ereg_*相关函数在php6中将不被支持(从PHP5.3.0开始已经删除),不推荐使用。 正则语法记忆、理解 PHP函数 2、正则表达式的语法规则 正则表达式描述了一种字符串的排列模式,主要用于字符串的模式分割、匹配、查找及替换等操作。正则表达式是主要由原子(普通字符,如单个英文字符、数字、特殊字符等)、元字符(有特殊功用的字符)以及模式修正字符组成。一个正则表达式中至少包含一个原子。他们各自功能和含义有所不同,下面将分别讲述正则表达式的组成元素及其语法规则。 $content = preg_split('//i',$content);原子:通常是最基本一个字符。 元字符:特殊字符,比如^,$。 模式修正字符:i,m等。9.php 模式修正符: 模式修正符是标记在整个模式之外的.

正则表达式大于50万的判断js与php写法

正则表达式大于50万的判断js与php写法