- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章第4章 数据处理-php正则表达式-郑阿奇(续)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1.正则表达式基础知识 含义:由普通字符和(a-z)和一些特殊字符组成的字符串模式 功能:有效性验证。 替换文本。 从一个字符串提取一个子字符串。 分类:POSIX和Perl POSIX风格更容易掌握,但不能用于二进制模式,而perl相对比较复杂。 2.POSIX风格的正则表达式 1.编写正则表达式 表4.3 POSIX正则表达式语法格式列表 。
字 符 。 |
描 述 。 |
\ 。 |
转义字符,用于转义特殊字符。例如,'.'匹配单个字符,'\.'匹配一个点号。'\-'匹配连字符'-','\\'匹配符号'\' 。 |
^ 。 |
匹配输入字符串的开始位置。例如'^he'表示以'he'开头的字符串 。 |
$ 。 |
匹配输入字符串的结束位置。例如,'ok$'表示以'ok'结尾的字符串 。 |
* 。 |
匹配前面的子表达式零次或多次。例如,'zo*'能匹配"z"以及"zoo"。*等价于{0,} 。 |
+ 。 |
匹配前面的子表达式一次或多次。例如,'zo+'能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,} 。 |
? |
匹配前面的子表达式零次或一次。例如,'do(es)?'可以匹配"do"或"does"中的"do"。'?'等价于{0,1} 。 |
{n} 。 |
n是一个非负整数。匹配确定的n次。例如,'o{2}'不能匹配"Bob"中的'o',但是能匹配"food" 中的两个'o' 。 |
{n,} 。 |
n是一个非负整数。至少匹配n次。例如,'o{2,}'不能匹配"Bob"中的'o',但能匹配"foooood" 中的所有'o'。'o{1,}'等价于'o+'。'o{0,}'则等价于'o*' 。 |
{n,m} 。 |
m和n均为非负整数,其中n≤m。最少匹配n次且最多匹配m次。例如,"o{1,3}"将匹配"fooooood"中的前三个'o'。'o{0,1}'等价于'o?'。请注意在逗号和两个数之间不能有空格 。 |
? |
当该字符紧跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串"oooo",'o+?'将匹配单个"o",而'o+' 将匹配所有'o' 。 |
. 。 |
匹配除"\n"之外的任何单个字符,要匹配包括'\n' 在内的任何字符,可以使用'[.\n]'的模式 。 |
(pattern) 。 |
匹配pattern并获取这一匹配。所获取的匹配保存到相应的数组中。要匹配圆括号字符,请使用 '\(' 或 '\)' 。 |
(?:pattern) 。 |
匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储。这在使用"或"|"来组合一个模式的各个部分时很有用。例如,'industr(?:y|ies).就是一个比'industry|industries'更简略的表达式 。 |
(?=pattern) 。 |
正向预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows(?=95|98|NT|2000)'能匹配"Windows 2000"中的"Windows",但不能匹配"Windows 3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 。 |
(?!pattern) 。 |
负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows(?!95|98|NT|2000)'能匹配"'Windows 3.1"中的"Windows",但不能匹配"Windows 2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始 。 |
x|y 。 |
匹配x或y。例如,'z|food' 能匹配"z"或"food",'(z|f)ood'则匹配"zood"或"food" 。 |
[xyz] 。 |
字符集合。匹配所包含的任意一个字符。例如,'[abc]'可以匹配"plain"中的'a' 。 |
[^xyz] 。 |
负值字符集合。匹配未包含的任意字符。例如,'[^abc]'可以匹配"plain"中的'p' 。 |
[a-z] 。 |
字符范围。匹配指定范围内的任意字符。例如,'[a-z]'可以匹配'a'到'z' 范围内的任意小写字母字符 。 |
[^a-z] 。 |
负值字符范围。匹配不在指定范围内的任意字符。例如,'[^a-z]'可以匹配不在'a' 到'z'范围内的任意字符 。 |
以下是几个简单的正则表达式的例子: ●'[A-Za-z0-9] ':表示所有的大写字母、小写字母及0到9的数字。 ●'^hello':表示以hello开始的字符串。 ●'world$':表示以world结尾的字符串。 ●'.at':表示以除"\n"外的任意单个字符开头并以"at"结尾的字符串,如"cat"、"nat"等。 ●'^[a-zA-Z]':表示一个以字母开头的字符串。 ●'hi{2}':表示字母h后跟着两个i即hii。 ●'(go)+':表示至少含有一个'go'字符串的字符串,如'gogo' 身份证号码一般由18位数字或17位数字后面加一个X或Y字母组成,要匹配身份证号码,可以写作: ^[0-9]{17}([0-9]|X|Y)$ Email地址的正则表达式可以写作: ^[a-zA-Z0-9\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$ 2.字符串的匹配 ereg()和eregi()函数 使用ereg()函数可以查找字符串与子字符串匹配的情况,并返回匹配字符串的长度,还可以借助参数返回匹配字符的数组。语法格式如下: int ereg(string ($pattern) , string $string [, array $regs ]) 。
复制代码代码如下
<?php /*本例检查字符串是否是ISO格式的日期(YYYY-MM-DD) */ $date="1988-08-09"; $len=ereg ('([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})', $date, $regs);//日期格式为YYYY-MM-DD if ($len) { echo "$regs[3].$regs[2].$regs[1]". "<br>"; //输出"09.08.1988" echo $regs[0] ."<br>"; //输出"1988-08-09" echo $len; //输出10 } else { echo "错误的日期格式: $date"; } ?> 。
3.字符串的替换 ereg_replace()函数语法格式如下: string ereg_replace(string $pattern , string $replacement , string $string) 说明:函数使用字符串$replacement替换字符串$string中与$pattern匹配的部分,并返回替换后的字符串。若未找到匹配项,则原样返回 。
复制代码代码如下
<?php $str="hello world"; echo ereg_replace('[aeo]', 'x',$str). "<br>"; //输出'hxllx wxrld' $res='<a href=\"hello.php\">hello</a>'; echo ereg_replace('hello', $res,$str); //使用超链接替换'hello' ?> 。
4.分割数组 使用split()函数可以完成与explode()函数一样的功能,而且可以根据给出的正则表达式来分割字符串,并返回一个数组。语法格式如下: array split(string $pattern , string $string [, int $limit ]) 5.产生正则表达式 3.Perl兼容的正则表达式 1.编写正则表达式 表4.4 Perl兼容正则表达式扩充的语法格式 。
字 符 。 |
描 述 。 |
\b 。 |
匹配一个单词边界,也就是指单词和空格间的位置。例如,'er\b'可以匹配"never"中的 'er',但不能匹配"verb"中的'er' 。 |
\B 。 |
匹配非单词边界。'er\B'能匹配"verb"中的'er',但不能匹配"never"中的'er' 。 |
\cx 。 |
匹配由x指明的控制字符。例如,'\cM'匹配一个Control-M或回车符。x的值必须为A~Z或a~z之一。否则,将'c'视为一个原义的'c'字符 。 |
\d 。 |
匹配一个数字字符。等价于'[0-9]' 。 |
\D 。 |
匹配一个非数字字符。等价于'[^0-9]' 。 |
\f 。 |
匹配一个换页符。等价于'\x0c'和'\cL' 。 |
\n 。 |
匹配一个换行符。等价于'\x0a'和'\cJ' 。 |
\r 。 |
匹配一个回车符。等价于'\x0d'和'\cM' 。 |
\s 。 |
匹配任何空白字符,包括空格、制表符、换页符等。等价于' [ \f\n\r\t\v] ' 。 |
\S 。 |
匹配任何非空白字符。等价于' [^ \f\n\r\t\v] ' 。 |
\t 。 |
匹配一个制表符。等价于'\x09'和'\cI' 。 |
\v 。 |
匹配一个垂直制表符。等价于'\x0b'和'\cK' 。 |
\w 。 |
匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]' 。 |
\W 。 |
匹配任何非单词字符,等价于'[^A-Za-z0-9_]' 。 |
\xn 。 |
匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配"A"。'\x041'则等价于'\x04' & "1"。正则表达式中可以使用ASCII编码 。 |
\num 。 |
匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,'(.)\1'匹配两个连续的相同字符 。 |
\n 。 |
标志一个八进制转义值或一个后向引用。如果\n之前至少有n个获取得子表达式,则n为后向引用。否则,如果n为八进制数字(0~7),则n为一个八进制转义值 。 |
\nm 。 |
标志一个八进制转义值或一个后向引用。如果\nm之前至少有nm个获取得子表达式,则 nm为后向引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的后向引用。如果前面的条件都不满足,若 n和m均为八进制数字(0~7),则\nm将匹配八进制转义值nm 。 |
\nml 。 |
如果n为八进制数字(0~3),且m和l均为八进制数字(0~7),则匹配八进制转义值nml 。 |
\un 。 |
匹配n,其中n是用4个十六进制数字表示的Unicode字符。例如,'\u00A9'匹配版权符号(©) 。 |
2.字符串匹配 preg_match()函数进行字符串的查找,语法格式如下: int preg_match(string $pattern , string $subject [, array $matches [, int $flags ]]) 说明:该函数的结构与ereg()函数类似,在$subject字符串中搜索与$pattern给出的正则表达式相匹配的内容。 preg_match()函数返回$pattern所匹配的次数。不是0次(没有匹配)就是1次,因为preg_match()函数在第一次匹配之后将停止搜索 还有一个是preg_match_all(),从第一个匹配的末尾开始继续搜索,直到搜索完整个字符串。 preg_match_all()函数参数$flags的值可以取以下三种: ●PREG_PATTERN_ORDER。默认项,表示$matches[0]为全部模式匹配的数组, $matches[1]为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。 ●PREG_SET_ORDER。如果设定此标记,则$matches[0]为第一组匹配项的数组,$matches[1]为第二组匹配项的数组,以此类推。 ●PREG_OFFSET_CAPTURE。PREG_OFFSET_CAPTURE可以和其他两个标记组合使用, 如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。 3.字符串的替换 使用preg_replace()函数能够完成与函数ereg_replace()相同的功能,在字符串中查找匹配的子字符串,并用指定字符串替换子字符串。 语法格式如下: mixed preg_replace(mixed $pattern , mixed $replacement , mixed $subject [, int $limit ]) 4.字符串的分割 preg_split()函数可以使用正则表达式作为边界分割一个字符串,并将子字符串存入一个数组返回,作用与split()函数类似。 语法格式如下: array preg_split(string $pattern , string $subject [, int $limit [, int $flags ]]) 说明:本函数区分大小写,返回一个数组,数组包含$subject中沿着与$pattern匹配的边界所分割的子串。 $limit是可选参数,如果指定则最多返回$limit个字串,如果省略或为-1,则没有限制。 $flags的值可以是以下三种: ●PREG_SPLIT_NO_EMPTY。如果设定本标记,则函数只返回非空的字符串。 ●PREG_SPLIT_DELIM_CAPTURE。如果设定本标记,定界符模式中的括号表达式的匹配项也会被捕获并返回。 PREG_SPLIT_OFFSET_CAPTURE。如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。 4.3实例-验证表单内容 【例4.4】 使用正则表达式验证用户输入的表单内容是否满足格式要求。 新建EX4_4_Hpage.php文件,输入以下代码。 。
复制代码代码如下
<?php include 'EX4_4_Hpage.php'; //包含文件EX4_4Hpage.php $id=$_POST['ID']; $pwd=$_POST['PWD']; $phone=$_POST['PHONE']; $Email=$_POST['EMAIL']; $checkid=preg_match('/^\w{1,10}$/',$id); //检查字符串是否在10个字符以内 $checkpwd=preg_match('/^\d{4,14}$/',$pwd); //检查是否在4~14个数字之间 $checkphone=preg_match('/^1\d{10}$/',$phone); //检查是否是以1开头的11位数字 //检查Email地址的合法性 $checkEmail=preg_match('/^[a-zA-Z0-9_\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/',$Email); if($checkid&&$checkpwd&&$checkphone&&$checkEmail) //如果都为1,则注册成功 echo "注册成功!"; else echo "注册失败,格式不对"; ?> 。
新建EX4_4_Ppage.php文件,输入以下代码: 2.字符串匹配 preg_match()函数进行字符串的查找,语法格式如下: int preg_match(string $pattern , string $subject [, array $matches [, int $flags ]]) 说明:该函数的结构与ereg()函数类似,在$subject字符串中搜索与$pattern给出的正则表达式相匹配的内容。 preg_match()函数返回$pattern所匹配的次数。不是0次(没有匹配)就是1次,因为preg_match()函数在第一次匹配之后将停止搜索 还有一个是preg_match_all(),从第一个匹配的末尾开始继续搜索,直到搜索完整个字符串。 preg_match_all()函数参数$flags的值可以取以下三种: ●PREG_PATTERN_ORDER。默认项,表示$matches[0]为全部模式匹配的数组, $matches[1]为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。 ●PREG_SET_ORDER。如果设定此标记,则$matches[0]为第一组匹配项的数组,$matches[1]为第二组匹配项的数组,以此类推。 ●PREG_OFFSET_CAPTURE。PREG_OFFSET_CAPTURE可以和其他两个标记组合使用, 如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。 3.字符串的替换 使用preg_replace()函数能够完成与函数ereg_replace()相同的功能,在字符串中查找匹配的子字符串,并用指定字符串替换子字符串。 语法格式如下: mixed preg_replace(mixed $pattern , mixed $replacement , mixed $subject [, int $limit ]) 4.字符串的分割 preg_split()函数可以使用正则表达式作为边界分割一个字符串,并将子字符串存入一个数组返回,作用与split()函数类似。 语法格式如下: array preg_split(string $pattern , string $subject [, int $limit [, int $flags ]]) 说明:本函数区分大小写,返回一个数组,数组包含$subject中沿着与$pattern匹配的边界所分割的子串。 $limit是可选参数,如果指定则最多返回$limit个字串,如果省略或为-1,则没有限制。 $flags的值可以是以下三种: ●PREG_SPLIT_NO_EMPTY。如果设定本标记,则函数只返回非空的字符串。 ●PREG_SPLIT_DELIM_CAPTURE。如果设定本标记,定界符模式中的括号表达式的匹配项也会被捕获并返回。 PREG_SPLIT_OFFSET_CAPTURE。如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。 4.3实例-验证表单内容 【例4.4】 使用正则表达式验证用户输入的表单内容是否满足格式要求。 新建EX4_4_Hpage.php文件,输入以下代码。 。
复制代码代码如下
<?php include 'EX4_4_Hpage.php'; //包含文件EX4_4Hpage.php $id=$_POST['ID']; $pwd=$_POST['PWD']; $phone=$_POST['PHONE']; $Email=$_POST['EMAIL']; $checkid=preg_match('/^\w{1,10}$/',$id); //检查字符串是否在10个字符以内 $checkpwd=preg_match('/^\d{4,14}$/',$pwd); //检查是否在4~14个数字之间 $checkphone=preg_match('/^1\d{10}$/',$phone); //检查是否是以1开头的11位数字 //检查Email地址的合法性 $checkEmail=preg_match('/^[a-zA-Z0-9_\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/',$Email); if($checkid&&$checkpwd&&$checkphone&&$checkEmail) //如果都为1,则注册成功 echo "注册成功!"; else echo "注册失败,格式不对"; ?> 。
新建EX4_4_Ppage.php文件,输入以下代码: 。
复制代码代码如下
<?php include 'EX4_4_Hpage.php'; //包含文件EX4_4Hpage.php $id=$_POST['ID']; $pwd=$_POST['PWD']; $phone=$_POST['PHONE']; $Email=$_POST['EMAIL']; $checkid=preg_match('/^\w{1,10}$/',$id); //检查字符串是否在10个字符以内 $checkpwd=preg_match('/^\d{4,14}$/',$pwd); //检查是否在4-14个字符之间 $checkphone=preg_match('/^1\d{10}$/',$phone); //检查是否是以1开头的11位数子 //检查Email地址的合法性 $checkEmail=preg_match('/^[a-zA-Z0-9_\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/',$Email); if($checkid&&$checkpwd&&$checkphone&&$checkEmail) //如果都为1,则注册成功 echo "注册成功!"; else echo "注册失败,格式不对"; ?> 。
最后此篇关于第4章 数据处理-php正则表达式-郑阿奇(续)的文章就讲到这里了,如果你想了解更多关于第4章 数据处理-php正则表达式-郑阿奇(续)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!