PHP编程技巧:看实例学正则表达式

C#实现匹配字符串(附完整源码) 阅读详情
首先,让我们看看两个特别的字符:’^’ 和 ‘$’ 他们是分别用来匹配字符串的开始和结束,一下分别举例说明:

  "^The": 匹配以 "The"开头的字符串;

  "of despair$": 匹配以 "of despair" 结尾的字符串;

  "^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配;

  "notice": 匹配包含notice的字符串;

  你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边。

  这里还有几个字符 '*', '+',和 '?', 他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:"zero or more", "one or more", and "zero or one." 这里是一些例子:

  "ab*": 匹配字符串a和0个或者更多b组成的字符串("a", "ab", "abbb", etc.);

  "ab+": 和上面一样,但最少有一个b ("ab", "abbb", etc.);

  "ab?":匹配0个或者一个b;

  "a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的字符串.

  你也可以在大括号里面限制字符出现的个数,比如

  "ab{2}": 匹配一个a后面跟两个b(一个也不能少)("abb");

  "ab{2,}": 最少更两个b("abb", "abbbb", etc.);

  "ab{3,5}": 2-5个b("abbb", "abbbb", or "abbbbb").

  你还要注意到你必须总是指定 (i.e, "{0,2}", not "{,2}").同样,你必须注意到, '*', '+', 和'?' 分别和一下三个范围标注是一样的,"{0,}", "{1,}", 和 "{0,1}"。

  现在把一定数量的字符放到小括号里,比如:

  "a(bc)*": 匹配 a 后面跟0个或者一个"bc";

  "a(bc){1,5}": 一个到5个 "bc."

  还有一个字符 '│', 相当于OR 操作:

  "hi│hello": 匹配含有"hi" 或者 "hello" 的 字符串;

  "(b│cd)ef": 匹配含有 "bef" 或者 "cdef"的字符串;

  "(a│b)*c": 匹配含有这样 - 多个(包括0个)a或b,后面跟一个c的字符串 的字符串;

  一个点('.')可以代表所有的 单一字符:

  "a.[0-9]": 一个a跟一个字符再跟一个数字的 (含有这样一个字符串的字符串将被匹配,以后省略此括号)

  "^.{3}$": 以三个字符结尾.中括号括住的内容只匹配一个 单一的字符

  "[ab]": 匹配单个的 a 或者 b ( 和 "a│b" 一样);

  "[a-d]": 匹配'a' 到'd'的单个字符 (和"a│b│c│d" 还有 "[abcd]"效果一样);

  "^[a-zA-Z]": 匹配以字母开头的字符串

  "[0-9]%": 匹配含有 形如 x% 的字符串

  ",[a-zA-Z0-9]$": 匹配以逗号在加一个数字或字母结尾的字符串

  你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^' 作为开头 (i.e., "%[^a-zA-Z]%" 匹配含有 两个百分号里面有一个非字母 的字符串).

  为了能够解释,但"^.[$()│*+?{/"作为有特殊意义的字符的时候,你必须在这些字符面前加'', 还有在php3中你应该避免在模式的最前面使用/, 比如说,正则表达式 "(/$│?[0-9]+" 应该这样调用 ereg("(//$│?[0-9]+", $str) (不知道php4是不是一样)

  不要忘记在中括号里面的字符是这条规路的例外—在中括号里面, 所有的特殊字符,包括(''), 都将失去他们的特殊性质(i.e., "[*/+?{}.]"匹配含有这些字符的字符串). 还有,正如regx的手册告诉我们: "如果列表里含有 ']', 最好把它作为列表里的第一个字符(可能跟在'^'后面). 如果含有'-', 最好把它放在最前面或者最后面, or 或者一个范围的第二个结束点(i.e. [a-d-0-9]中间的‘-’将有效.

  为了完整, 我应该涉及到 collating sequences, character classes, 同埋 equivalence classes. 但我在这些方面不想讲的太详细, 这些在下面的文章仲都不需要涉及到. 你们可以在regex man pages 那里得到更多消息.

  如何构建一个模式来匹配 货币数量 的输入

  好了,现在我们要用我们所学的来干一些有用的事:构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式: "10000.00" 和 "10,000.00",或者没有小数部分, "10000" and "10,000". 现在让我们开始构建这个匹配模式:

  ^[1-9][0-9]*$

  这是所变量必须以非0的数字开头.但这也意味着 单一的 "0" 也不能通过测试. 以下是解决的方法:

  ^(0│[1-9][0-9]*)$

  "只有0和不以0开头的数字与之匹配",我们也可以允许一个负号再数字之前:

  ^(0│-?[1-9][0-9]*)$

  这就是: "0 或者 一个以0开头可能有一个负号在前面的数字." 好了, 好了现在让我们别那么严谨,允许以0开头.现在让我们放弃 负号 , 因为我们在表示钱币的时候并不需要用到. 我们现在指定 模式 用来匹配小数部分:

  ^[0-9]+(/.[0-9]+)?$

  这暗示匹配的字符串必须最少以一个阿拉伯数字开头. 但是注意,在上面模式中 "10." 是不匹配的, 只有 "10" 和 "10.2" 才可以. (你知道为什么吗)

  ^[0-9]+(/.[0-9]{2})?$

  我们上面指定小数点后面必须有两位小数.如果你认为这样太苛刻,你可以改成:

  ^[0-9]+(/.[0-9]{1,2})?$

  这将允许小数点后面有一到两个字符. 现在我们加上用来增加可读性的逗号(每隔三位), 我们可以这样表示:

  ^[0-9]{1,3}(,[0-9]{3})*(/.[0-9]{1,2})?$

  不要忘记加号 '+' 可以被乘号 '*' 替代如果你想允许空白字符串被输入话 (为什么?). 也不要忘记反斜杆 ’/’ 在php字符串中可能会出现错误 (很普遍的错误). 现在,我们已经可以确认字符串了, 我们现在把所有逗号都去掉 str_replace(",", "", $money) 然后在把类型看成 double然后我们就可以通过他做数学计算了.

  构造检查email的正则表达式

  让我们继续讨论怎么验证一个email地址. 在一个完整的email地址中有三个部分: POP3 用户名 (在 '@' 左边的一切), '@', 服务器名(就是剩下那部分). 用户名可以含有大小写字母阿拉伯数字,句号 ('.'), 减号('-'), and 下划线 ('_'). 服务器名字也是符合这个规则,当然下划线除外.

  现在, 用户名的开始和结束都不能是句点. 服务器也是这样. 还有你不能有两个连续的句点他们之间至少存在一个字符,好现在我们来看一下怎么为用户名写一个匹配模式:

  ^[_a-zA-Z0-9-]+$

  现在还不能允许句号的存在. 我们把它加上:

  ^[_a-zA-Z0-9-]+(/.[_a-zA-Z0-9-]+)*$

  上面的意思就是说: "以至少一个规范字符(除.意外)开头,后面跟着0个或者多个以点开始的字符串."

  简单化一点, 我们可以用 eregi()取代 ereg().eregi()对大小写不敏感, 我们就不需要指定两个范围 "a-z" 和 "A-Z" – 只需要指定一个就可以了:

  ^[_a-z0-9-]+(/.[_a-z0-9-]+)*$

  后面的服务器名字也是一样,但要去掉下划线:

  ^[a-z0-9-]+(/.[a-z0-9-]+)*$

  Done. 现在只需要用”@”把两部分连接:

  ^[_a-z0-9-]+(/.[_a-z0-9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*$

  这就是完整的email认证匹配模式了,只需要调用

  eregi(‘^[_a-z0-9-]+(/.[_a-z0-9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*$ ’,$eamil)

  就可以得到是否为email了。

  正则表达式的其他用法

  提取字符串

  ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册). 比如说,我们想从 path/URL 提取文件名 – 下面的代码就是你需要:

  ereg("([^///]*)$", $pathOrUrl, $regs);
  echo $regs[1];

  高级的代换

  ereg_replace() 和 eregi_replace()也是非常有用的: 假如我们想把所有的间隔负号都替换成逗号:

  ereg_replace("[ /n/r/t]+", ",", trim($str));
字符串匹配算法实现(C#) KMP算法是一种高效的字符串匹配算法,它利用了模式串中的部分匹配信息,避免了不必要的比较操作。这篇文章介绍了三种常见的字符串匹配算法:简单匹配算法、KMP算法和Boyer-Moore算法,并提供了它们的C#实现。通过了解和实践这些算法,您可以更好地理解字符串匹配的原理和实现,从而在实际应用中选择适合的算法来解决问题。它的思想很简单:从文本的第一个字符开始,逐个比较模式串和文本串的字符,如果发现不匹配的字符,则将文本串向后移动一位,继续比较下一个位置。如果找到了完全匹配的子串,则返回匹配的起始位置。 阅读详情

相关推荐

常用正交表(测试用例正交对照表).zip

常用正交表,包含L4(23)、L8(27)、L12(211)、L9(34)、L16(45)、L25(56)、L8(4×24)、L12(3×24)、L16(44×23)

匹配两个字符串中的相同部分 并找出最长的相同部分

闲来无事,看到别人说的面试题让取到里两个字符串最长匹配的字符串,于是就想试试,自己捣鼓了一下,方法挺笨的,就是for循环遍历,没有想到其他简便的思路,但是效果还是能实现的。 题目 再详细说一下题目:取到里两个字符串最长匹配的字符串,可能有些人不是很明白什么意思。比如现在有两个字符串: NSString *str1 = @"qwe不重要的文字ty"; NSString *str2 = @"哈qwe这...

weixin_34202952的博客 4862

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 477

.net 获取两个字符串中相同的字符

.NET 中可以使用 Linq 的 Intersect 方法来获取两个字符串中相同的字符。 例如,下面的代码可以获取字符串 "abc" 和 "cde" 中相同的字符: using System.Linq; string str1 = "abc"; string str2 = "cde"; var commonChars = str1.Intersect(str2); foreach (var...

weixin_42576186的博客 327

给排水工程师的SWMM初体验:从软件界面到第一个简单模型的保姆级上手教程

本文为给排水工程师提供SWMM软件的保姆级上手教程,从界面解析到创建第一个简单模型,详细介绍了SWMM的核心功能和操作步骤。通过30分钟的实践指导,帮助新手快速掌握雨水管网建模的基本技能,提升工作效率。

weixin_28736355的博客 323

多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解

多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解 1. 概览 在开始具体讨论卡尔曼滤波和匈牙利算法之前,首先我们来看一下基于检测的目标跟踪算法的大致流程。 2. 卡尔曼滤波(Kalman filter) 目标跟踪中使用的就是最基础的 Kalman filter 算法。这里也仅仅讨论最基础的 Kalman filter 算法。 卡尔曼滤波算法的过程很简单,如下图所示。最核心的两个步骤就是预测和更新(下图的 correct)。 在目标跟踪任务中,目标的

生命在于折腾! 2万+

C# 使用正则表达式

正则表达式是一种用于匹配和处理文本的强大工具,常用于字符串的搜索、替换、验证等操作。在C#中,可以使用命名空间提供的类来处理正则表达式。正则表达式由一系列字符和特殊字符组成,用于定义模式或规则,用于匹配和操作字符串。它具有灵活、强大的模式匹配能力,可以根据特定的模式对文本进行高效的搜索和操作。?[]()\d\w\s在C#中,可以使用Regex类来创建正则表达式对象,并使用其方法进行匹配、搜索、替换等操作。MatchMatchesReplaceSplit上述代码使用正则表达式\b\w+

微软技术分享 2万+

Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测的详细项目实例

这些数据包含了随时间变化她动态信息,具有显著她趋势她、周期她和季节她特征。该模型她核心优势在她其能够自适应地学习数据中她多层次时序信息,捕捉时间序列中她长短期依赖关系,从而提高预测她准确她和可靠她。本项目旨在实她一个基她PTO-TCN-LTTM-TFSttfntion她多变量时间序列预测模型,通过粒子群优化算法优化时间卷积长短期记忆神经网络,并融合注意力机制,提高模型她预测精度和稳定她。本项目模型她实她分为多个阶段,首先她数据预处理,接着她PTO优化,然后她TCN和LTTM网络她构建她训练。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 1080

跟我学正则之——开发中正则表达式的使用

很多程序员以为,正则表达式只能做一些校验工作,比如说E-mail的校验,比如说电话号码的校验,而实际上,正则表达式可以做得更多。在我们的开发过程中,常常会有一些文本需要处理,比如说替换,比如说查找匹配。甚至于在我们的日常工作中也会有同样的需求,比如说在Word中,我们需要把重复的单词替换掉。今天我想说说在日常开发中,哪些地方会用到正则表达式,这些表达式都是从我开发的代码中提取出来的,不局限于哪一种...

weixin_33807284的博客 120

YOLOv13安装教程 手把手教你融合空间注意力机制(SAB)的RAB卷积模块 自动“聚焦”重要的特征 map指标提升8.96,准确率提升3.56

本文提出了一种改进的YOLOv13目标检测模型,通过引入RAB(残差注意力模块)显著提升了检测性能。实验结果显示,添加RAB模块后,mAP指标提升了8.96,准确率提高了3.56%。文章详细介绍了RAB模块的实现方法:1)采用多级残差连接增强特征提取能力;2)结合空间注意力机制(SAB)自动聚焦关键区域;3)通过1×1卷积实现通道维度压缩与恢复。同时提供了完整的模型移植方案,包括配置文件修改、任务处理代码调整以及模块实现细节,为YOLO系列模型的性能优化提供了有效参考。

FJN110的博客 647

51单片机8×8LED点阵屏动态显示取模汉字+ Proteus仿真

51单片机8×8LED点阵屏动态显示取模汉字+ Proteus仿真 Proteus仿真 取模软件:pctolcd2002 程序代码 #include<reg52.h> unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//行选 unsigned char code tabb[]={0x08,0x49,0x49,0x7F,0x08,0x49,0x49,0x7F};//选列"出" unsigned cha

perseverance51博客 8057

正则表达式基础小总结(实例讲解)

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。 正则表达式的特点是: 1. 灵活

物流小哥的博客 1515

基于STM32设计的老人防摔倒报警设备(OneNet)_65

本文设计了一种基于STM32单片机的智能老人防摔倒报警设备。该系统结合MPU6050陀螺仪传感器实时监测老人的姿态变化,检测摔倒事件;通过SIM800C通信模块发送短信通知紧急联系人,并将GPS定位信息上传至云端平台,确保家属能够及时了解老人的准确位置。

1万+

正则表达式前端使用手册

目录 导读 回顾历史 正则表达式的定义 元字符 反义元字符 重复限定符 字符组 排除性字符组 多选结构 括号 转义字符 操作符的运算优先级 测试 修饰符 常用的正则表达式 密码验证 正则的几大家族 正则表达式分类 正则表达式比较 linux/osx下常用命令与正则表达式的关系 grep , egrep

学如逆水行舟,不进则退 2416

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

研发部门是传统企业AI转型的第一公里

在工业智能化进程中,AI落地的核心瓶颈并非算力或算法,而是业务理解与物理世界闭环的缺失。研发部门天然具备问题定义权、原生高价值数据和真实验证能力,使其成为AI从概念走向产线的关键枢纽。通过将轻量级AI工具嵌入工程师日常实验流与设计决策中,可绕过数据中台建设陷阱,实现‘用业务语言驱动AI’而非反之。尤其在材料性能预测、工艺参数优化、失效模式识别等典型场景中,基于物理规律+小样本数据的XGBoost/LSTM模型,已证明比大模型更高效、可解释、易部署。这种以研发为支点的AI渗透路径,正推动传统企业知识资产从隐性

weixin_34242819的博客 369

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

2007年第29周优快云读书排行榜:《精通正则表达式》夺冠

2007年第29周优快云读书排行榜【以点击次数计】: NO.1:精通正则表达式:第3版 学正则、用正则、本书让你做正则高手。上线1周,点击人次过7000,夺冠本周。 NO.2:Programming C#中文版:第4版 C#经典图书,读者苦待一年,现今终于上线。上线2周,目前点击数已过1.1万,居本周榜眼。 NO.3:C++网络编程卷1:

优快云读书社区官方博客 3916

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

php 玉_php初级资料汇总

初探PHP5-1初探PHP5_2初探PHP5_3初探PHP5_4十天学会php之01十天学会php之02十天学会php之03十天学会php之04十天学会php之05十天学会php之06十天学会php之07十天学会php之08十天学会php之09十天学会php之10PHP4实际应用经验篇(1)PHP4实际应用经验篇(2)PHP4实际应用经验篇(3)PHP4实际应用经验篇(4)PHP4实际应用经验篇(...

weixin_34646207的博客 145

谈谈正则表达式

正则表达式(regular expression),是一种文本处理工具,通常和

浮生专栏 2162

php技术资料01

[2007年11月01日 17:17] <a title="信息标题:通用数据查询及分页函数模块 所属分类:PHP技术资料 发布时间:2007年11月01日" href="http://www.115000.com.cn/liuy/html/2/2007-11-01/1590_20071101171747.html" target="_blank">通用数据查询及分

印像空间 542

java 正则表达式 1_Java中的正则表达式(1)

正则表达式(Regular Expressions)可不是Java的专利,很多的语言像Perl,Python,PHP,Ruby等等都支持正则表达式,正则表达式是字符串处理的利器,它是一种描述字符串模式的式子,一个正则表达式的核心价值就是匹配一个字符串。各个语言实现的正则表达式引擎并不完全相同,Oreilly出版的《精通正则表达式》是讲解正则表达式的经典教程。这里只是总结下Java中的正则表达式的相...

weixin_34718952的博客 271

Regexpal - 在线正则表达式验证工具

用飞鸽(Pageflakes)定制自己个性首页,我的 Web 我作主! Regexpal 是一个 Javascript 写成的正则表达式在线验证工具,对于常接触正则的程序员来说,是个很实用的工具。 正则表达式 (Regular Expression) 作为一种方便快捷的字符串处理方案,受到了越来越多程序员的欢迎。虽然初学正则表达式比较抓狂,但一旦开始使用它,你就发现它真是强大的不得了。在 We...

solorez 1710
上一篇: php程序如何生成验证码图片
下一篇: 谈PHP生成静态页面
mzphp
博客等级 码龄21年 9粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值