一个通用的php正则表达式匹配或检测或提取特定字符类
在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正则表达式匹配或检测或提取特定字符类的更多相关文章
- RELabel : 一个极简的正则表达式匹配和展示框架
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- oracle 正则表达式 匹配
oracle 正则表达式 在实际应用中,想排除带有中文的字段值: select h.froomnumber from t_broker_house h where REGEXP_LIKE(froomn ...
- php正则表达式匹配img中任意属性的方法
经常和图片打交道,不得不用到一些提取图片中scr.alt.title.等的属性,这里总结给大家一些常用的,感觉还不错,比较通用! PHP正则表达式匹配img中任意属性PHP 复制代码代码如下: < ...
- 正则表达式匹配 C++实现 java实现 leetcode系列(十一)
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 ...
- LeetCode正则表达式匹配
题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 ...
- leetcode题目10.正则表达式匹配(困难)
题目描述: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 ...
- Java算法练习——正则表达式匹配
题目链接 题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要 ...
- Java实现 LeetCode 10 正则表达式匹配
10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配, ...
- LeetCode 热题 HOT 100(05,正则表达式匹配)
LeetCode 热题 HOT 100(05,正则表达式匹配) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力 ...
随机推荐
- 001 Python中的变量和字符串
1.Python“变量”更像“名字” 变量名就像我们现实社会的名字,把一个值赋值给一个名字时,Ta会存储在内存中,称之为变量(variable). 在大多数语言中,都把这种行为称为“给变量赋值”或“把 ...
- 35 个你也许不知道的 Google 开源项目
转载自:http://blog.csdn.net/cnbird2008/article/details/18953113 Google是支持开源运动的最大公司之一,它们现在总共发布有超过500个的开源 ...
- Fiddler进行模拟POST、PUT提交数据注意点
1.请求头要加 Accept: application/xml Content-Type: application/json 2.地址栏url地址后不要忘记加“/” 3.POST和PUT的对象参数都是 ...
- 【C++ STL】Map和Multimap
1.结构 Map和multimap将key/value pair(键值/实值 队组)当作元素,进行管理.他们根据key的排序准则将元素排序.multimap允许重复元素,map不允许. 元素要求: k ...
- [Luogu 1168] 中位数
中位数可以转化为区间第k大问题,当然是选择Treap实现名次树了啊.(笑) 功能十分简单的Treap即能满足需求--只需要插入与查找第大的功能. 插入第i个数时,如果i是奇数,随即询问当前排名第(i+ ...
- mysql 并发测试
针对上一节做一些针对公司业务的测试. 我们来做一些压力测试. 服务器配置: 操作系统: centos 5.6-64 CPU: 8核 内存: 8G 硬盘:sas 文件系统:linux MySQL:5.6 ...
- ios应用里面进入app store 下载界面
转自:http://blog.csdn.net/diyagoanyhacker/article/details/6654838 在IOS应用里直接打开app store 评论页面的方法: [[UIAp ...
- python学习笔记(七)之列表
列表:是一个加强版的数组,什么东西都可以往里面放. 创建列表 创建一个普通列表: >>> member = ['operating system', 'data structure' ...
- Network(POJ3694+边双连通分量+LCA)
题目链接:http://poj.org/problem?id=3694 题目: 题意:给你一个n个点m条边的无向连通图,进行q次操作,每次操作在u和v之间加一条边,问每次操作之后“桥”的数量. 思路: ...
- bzoj 3207 可持久化线段树
首先因为固定询问长度,所以我们可以将整个长度为n的数列hash成长度为n-k+1的数列,每次询问的序列也hash成一个数,然后询问这个数是不是在某个区间中出现过,这样我们可以根据初始数列的权值建立可持 ...