您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > PHP >

看实例学正则表达式(2)

来源:未知 责任编辑:责任编辑 发表时间:2013-12-06 08:44 点击:

 

"[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然后我们就可以通过他做数学计算了.

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • PHP测试
  • 十天学会php之第六天
  • 几种显示数据的方法的比较
  • 使用xmlhttp为网站增加域名查询功能
  • PHP+MYSQL+Javascript数据库查询结果的动态显示
  • 查找数组中指定键名的值
  • 用redis实现跨服务器session
  • 用新浪微博接口发送图片微博失败的原因
  • smarty局部缓存技术[源码分析]
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1