在php开发时,日常不可或缺地会用到正则表达式,可每次都要重新写,有时忘记了某一函数还要翻查手册,所以,抽空写了一个关于日常所用到的正则表达式区配类,便于随便移置调用.(^_^有点偷懒).

/*/////////////////////////////////////////////////////////////
* 类MatchAll功能:主要用于php日常所用到的几种检测匹配或提取特定字符.//
* 主要参数设置说明: $target_str 为目标字符即需要检测的字符或数字。//
* $isFind true:提取出匹配字符;false:单纯检测是否存在特定字符. //
* $isTotal true: 完全匹配模式;false:部分匹配模式. //
* @author: purpen //
* @email: purpen.w@gmail.com //
* @data: 2007-07-29 //
*/////////////////////////////////////////////////////
class MatchAll {
/**
* 功能: 用于检测IP地址是否合法或从字符串中提取IP字符.
*
* @param string $target_str
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function IP_match($target_str, $isFind=false, $isTotal=false) {
//采取的匹配模式
if ($isTotal == true) {
$pattern = "/^(\d{1,3}\.){3}\d{1,3}$/";
}else{
$pattern = "/(\d{1,3}\.){3}\d{1,3}/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能: 用于检测身份证号是否合法或从字符串中提取出身份证号字符.
*
* @param mixed $target_str
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function IDCard_match($target_str, $isFind=false, $isTotal=false){
//采取的匹配模式
if ($isTotal == true){
$pattern = "/^(\d{18}|\d{17}X|\d{15})$/";
}else{
$pattern = "/(\d{18}|\d{17}X|\d{15})/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能: 用于检测电话号码是否合法或从字符长串中提取出电话号码.
* @param mixed $target_str
* (例如: 010-87965421、(010)87965421、87965421、0394-5568447、(0394)5568447、5568447)
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function phone_match($target_str, $isFind=false, $isTotal=false) {
//采用匹配模式
if ($isTotal == true) {
$pattern = "/^((\(?\d{3,4}\))?|(\d{3,4}-)?)\d{7,8}$/";
}else{
$pattern = "/((\(?\d{3,4}\))?|(\d{3,4}-)?)\d{7,8}/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能:用于检测邮政编码是否合法或从字符长串中提取出邮政编码字符.
*
* @param mixed $target_str
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function postalcode_match($target_str, $isFind=false, $isTotal=false) {
//采取的匹配模式
if ($isTotal == true) {
$pattern = "/^\d{6}$/";
}else{
$pattern = "/\d{6}/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能: 用于完全匹配、部队匹配或提出网络url的方法.
* @param string $target_str
* @param boolean $isFind 是否提取出匹配目标
* @param boolean $isTotal 是否完全匹配
* @return mixed
*/
public static function neturl_match ($target_str, $isFind=false, $isTotal=false) {
//采用的匹配模式
if ($isTotal == true) {
$pattern = "/^(http\:\/\/)?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*.+$/";
}else{
$pattern = "/(http\:\/\/)?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能: 用于检测email是否合法或从字符串中提取出email字符串.
* @param string $target_str
* @param boolean $isFind 是否提取出字符串
* @param boolean $isTotal是否完全匹配
* @return mixed
*/
public static function email_match ($target_str, $isFind=false, $isTotal=false){
//采取的匹配模式
if ($isTotal == true){
$pattern = "/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*$/";
}else{
$pattern = "/[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能:用于完全匹配、部分匹配或提取出钱币数字的方法.
* @param mixed $target_str
* @param boolean $isFind
* @param boolean $isTotal
* @return mixed
*/
public static function money_match($target_str, $isFind=false, $isTotal=false) {
//采用完全匹配
if ($isTotal == true) {
$pattern = "/^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?$/";
}else{//部分匹配
$pattern = "/[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?/";
}
return self::get_match_result($target_str, $pattern, $isFind);
}
/**
* 功能:开始匹配目标字符串动作.
*
* @param mixed $target_str
* @param string $pattern
* @param boolean $isFind
* @return mixed
*/
public function get_match_result($target_str, $pattern, $isFind) {
//是否提取出匹配目标
if ($isFind == true) {
preg_match($pattern, $target_str, $result);
}else{
$result = preg_match($pattern, $target_str);
}
return $result;
}
/**
* 功能: 用于匹配测试
* @param str $target_str //$target_str = "select a, b, c, d from d";
*/
public function all_match($target_str) {
$pattern = "/select(.+)from(\s[a-zA-Z0-9])/i";
preg_match($pattern, $target_str, $result);
$fields = split(",", $result[1]);
print $result[2];
print "";
return $fields;
}
}

一个通用的php正则表达式匹配或检测或提取特定字符类的更多相关文章

  1. RELabel : 一个极简的正则表达式匹配和展示框架

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  2. oracle 正则表达式 匹配

    oracle 正则表达式 在实际应用中,想排除带有中文的字段值: select h.froomnumber from t_broker_house h where REGEXP_LIKE(froomn ...

  3. php正则表达式匹配img中任意属性的方法

    经常和图片打交道,不得不用到一些提取图片中scr.alt.title.等的属性,这里总结给大家一些常用的,感觉还不错,比较通用! PHP正则表达式匹配img中任意属性PHP 复制代码代码如下: < ...

  4. 正则表达式匹配 C++实现 java实现 leetcode系列(十一)

    给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串  ...

  5. LeetCode正则表达式匹配

    题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 ...

  6. leetcode题目10.正则表达式匹配(困难)

    题目描述: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个  ...

  7. Java算法练习——正则表达式匹配

    题目链接 题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要 ...

  8. Java实现 LeetCode 10 正则表达式匹配

    10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配, ...

  9. LeetCode 热题 HOT 100(05,正则表达式匹配)

    LeetCode 热题 HOT 100(05,正则表达式匹配) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力 ...

随机推荐

  1. ACM1198Farm Irrigation

    这个题目好吓人呀!嘿嘿--- 不过仔细分析下就可以啦! #include<iostream> #include<cstring> using namespace std; ; ...

  2. DataXceiver error processing unknown operation src: /127.0.0.1:36479 dst: /127.0.0.1:50010处理

    异常信息如下: 2015-12-09 17:39:20,310 ERROR datanode.DataNode (DataXceiver.java:run(278)) - hadoop07:50010 ...

  3. 寻找最大连续子序列/Find the max contiguous subsequence

    寻找最大连续子序列 给定一个实数序列X1,X2,...Xn(不需要是正数),寻找一个(连续的)子序列Xi,Xi+1,...Xj,使得其数值之和在所有的连续子序列数值之和中为最大. 一般称这个子序列为最 ...

  4. You can't specify target table 'table' for update in FROM clause

    delete from table1 where ID not in(select max(ID) ID from table1 group by row1) and row1 ) # 出现错误 # ...

  5. UVA 11440 Help Tomisu

    https://vjudge.net/problem/UVA-11440 题意: 求2——n! 之间有多少个整数x,满足x的所有素因子都大于m 保证m<=n x的所有素因子都大于m 等价于 x和 ...

  6. 【BZOJ】1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名

    [题意]给定n头牛和m对大小关系,求最坏情况下至少还需要比较几对奶牛的大小(在未确定顺序的奶牛对中随机比较) [算法]floyd求传递闭包 [题解]可达说明大小已知,则不可达点对数量就是最少比较次数. ...

  7. python模块subprocess学习

    当我们想要调用系统命令,可以使用os,commands还有subprocess模块整理如下: os模块: 1. os.system 输出命令结果到屏幕.返回命令执行状态. >>> o ...

  8. this指针再解

     this.new.call和apply的相关问题 讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一 ...

  9. 禁用 Cortana 的解决办法

    1. GPedit.msc 2. 然后在本地组策略编辑器中,点击“用户配置”中的“管理模版”,接着双击右侧的“Windows 组件”. 3. 下拉滚动条,并找到“文件资源管理器”,双击进入. 找到“在 ...

  10. Qualcomm platform, the commonly used parameters of charger and battery in device tree file

    Platform MSM8917 PM8937 PMI8940 Parameters 1 battery charging voltage : qcom,float-voltage-mv = < ...