常用正则式及其函数,在PHP中有两套正则表达式函数库。一套是由PCRE(Perl Compatible Regular Expression)库提供的,
其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation System interface)扩展库提供的,
一般使用以“ereg_”为前缀命名的函数。
常用正则式及其函数
0、正数:/^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/
1、非负整数:^\d+$
2、正整数:^[0-9]*[1-9][0-9]*$
3、非正整数:^((-\d+)|(0+))$
4、负整数:^-[0-9]*[1-9][0-9]*$
5、整数:^-?\d+$
6、非负浮点数:^\d+(\.\d+)?$
7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$
9、负浮点数:^(-((正浮点数正则式)))$
10、英文字符串:^[A-Za-z]+$
11、英文大写串:^[A-Z]+$
12、英文小写串:^[a-z]+$
13、英文字符数字串:^[A-Za-z0-9]+$
14、英数字加下划线串:^\w+$
15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
16、URL链接:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$或^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\’:+!]*([^<>\”\”])*$
17、邮政编码:^[1-9]\d{5}$
18、中文:^[\u0391-\uFFE5]+$
19、电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
20、手机号码:^((\(\d{2,3}\))|(\d{3}\-))?1\d{10}$
21、双字节字符(包括汉字在内):^\x00-\xff
22、首尾空格:(^\s*)|(\s*$)
23、HTML标记:<(.*)>.*<\/\1>|<(.*) \/>
24、空行:\n[\s| ]*\r
25、链接href:(h|H)(r|R)(e|E)(f|F) *= *(‘|”)?(\w|\\|\/|\.)+(‘|”| *|>)?
26、邮件:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
27、链接src:(s|S)(r|R)(c|C) *= *(‘|”)?(\w|\\|\/|\.)+(‘|”| *|>)?
28、IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
29、手机(CN):(86)*0*13\d{9}
30、固定电话(CN):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
31、电话号码(CN):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
32、邮编(CN):[1-9]{1}(\d+){5}
33、浮点数:(-?\d*)\.?\d+
35、电话区号:/^0\d{2,3}$/
36、腾讯QQ:^[1-9]*[1-9][0-9]*$
37、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
38、帐号(中文、英文、数字及下划线):^[\u4e00-\u9fa5_a-zA-Z0-9]+$
39、日期:^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
JAVACRIPT中用法如下:
<script type="text/javascript">
var exp = /(86)*0*13\d{9}/;
if (exp.test(contact) == false) {
alert("Please Enter A Valid Phone");
return false;
}
var exp = /^((?:19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/;
if(starttime.match(exp) == false) {
alert("Please Enter Valid Time");
return false;
}
</script>
PHP中用法如下:
在PHP中有两套正则表达式函数库。一套是由PCRE(Perl Compatible Regular Expression)库提供的,
其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation System interface)扩展库提供的,
一般使用以“ereg_”为前缀命名的函数。
1.preg_match (string $pattern, string $content [, array $matches])
<?php
//需要匹配的字符串。date函数返回当前时间
$content = "Current date and time is ".date("Y-m-d h:i a").", we are learning PHP together.";
//使用通常的方法匹配时间
if (preg_match ("/\d{4}-\d{2}-\d{2} \d{2}:\d{2} [ap]m/", $content, $m)) {
echo "匹配的时间是:" .$m[0]. "\n";
}
//由于时间的模式明显,也可以简单的匹配
if (preg_match ("/([\d-]{10}) ([\d:]{5} [ap]m)/", $content, $m)) {
echo "当前日期是:" .$m[1]. "\n";
echo "当前时间是:" .$m[2]. "\n";
}
?>
2.ereg()和eregi()
//文件内容的多行匹配
<?php
//parse_ini_file()。该函数直接将*.ini文件解析到一个大数组中。
$rows = file('php.ini');
//循环遍历
foreach($rows as $line) {
if(trim($line)) {
//将匹配成功的参数写入数组中
if(eregi("^([a-z0-9_.]*) *=(.*)", $line, $matches)) {
$options[$matches[1]] = trim($matches[2]);
}
unset($matches);
}
}
//输出参数结果
print_r($options);
?>
3.preg_grep (string $pattern, array $input)
<?php
$subjects = array(
"Mechanical Engineering", "Medicine",
"Social Science", "Agriculture",
"Commercial Science", "Politics"
);
//匹配所有仅由有一个单词组成的科目名
$alonewords = preg_grep("/^[a-z]*$/i", $subjects);
?>
4.preg_match_all()
5.ereg_replace()和eregi_replace()
<?php
//源代码的清理
//将文件读入数组中
$lines = file('source.php');
for($i=0; $i<count($lines); $i++) {
//将行末以“\\”或“#”开头的注释去掉
$lines[$i] = eregi_replace("(\/\/|#).*$", "", $lines[$i]);
//将行末的空白消除
$lines[$i] = eregi_replace("[ \n\r\t\v\f]*$", "\r\n", $lines[$i]);
}
//整理后输出到页面
echo htmlspecialchars(join("",$lines));
?>
6.preg_replace()
<?php
//字符串
$string = "Name: {Name}<br>\nEmail: {Email}<br>\nAddress: {Address}<br>\n";
//模式
$patterns =array(
"/{Address}/",
"/{Name}/",
"/{Email}/"
);
//替换字串
$replacements = array (
"No.5, Wilson St., New York, U.S.A",
"Thomas Ching",
"tom@emailaddress.com",
);
//输出模式替换结果
print preg_replace($patterns, $replacements, $string);
?>
7.split()和spliti(), preg_split()
<?php
$date = "08/30/2006";
//分隔符可以是斜线,点,或横线
list($month, $day, $year) = split ('[/.-]', $date);
//输出为另一种时间格式
echo "Month: $month; Day: $day; Year: $year<br />\n";
?>
<?php
$seek = array();
$text = "I have a dream that one day I can make it. So just do it, nothing is impossible!";
//将字符串按空白,标点符号拆分(每个标点后也可能跟有空格)
$words = preg_split("/[.,;!\s']\s*/", $text);
foreach($words as $val) {
$seek[strtolower($val)] ++;
}
echo "共有大约" .count($words). "个单词。";
echo "其中共有" .$seek['i']. "个单词“I”。";
?>



Pingback: JS/JQUERY字符串截取分割匹配等处理汇总 | 蓝文资源库 – 海量优质开发设计资源分享平台