资讯专栏INFORMATION COLUMN

PHP正则表达式

Nekron / 1097人阅读

摘要:但在某些情况下,用正则表达式去验证一个字符串比较复杂和费时。验证信用卡号验证域名从特定中提取域名将文中关键词高亮显示对于开发人员来说,正则表达式是一个非常有用的功能,它提供了查找,匹配,替换句子,单词,或者其他格式的字符串。

正则表达式是程序开发中一个重要的元素,它提供用来描述或匹配文本的字符串,如特定的字符、词或算式等。但在某些情况下,用正则表达式去验证一个字符串比较复杂和费时。本文为你介绍10种常见的实用PHP正则表达式的写法,希望对你的工作有所帮助

验证E-mail地址

这是一个用于验证电子邮件的正则表达式。但它并不是高效、完美的解决方案。在此不推荐使用。

$email = "test@ansoncheung.tk";
if
(preg_match("/^1[a-zA-Z0-9_]+(.+)@+(.+).{2,4}$/",$email))
{
echo "Your email is ok.";
} else {
echo "Wrong email address format";
}

为了更加有效验证电子邮件地址,推荐使用filer_var。

if (filter_var("test+email@ansoncheung", FILTER_VALIDATE_EMAIL)) {
echo "Your email is ok.";
} else {
echo "Wrong email address format.";
}

验证用户名

这是一个用于验证用户名的实例,其中包括字母、数字(A-Z,a-z,0-9)、下划线以及最低5个字符,最大20个字符。同时,也可以根据需要,对最小值和最大值做合理的修改。

$username = "user_name12";
if (preg_match("/^[a-zd_]{5,20}$/i", $username)) {
echo "Your username is ok.";
} else {
echo "Wrong username format.";
}

验证电话号码

这是一个验证美国电话号码的实例。

$phone = "(021)423-2323";
if (preg_match("/(?d{3})?[-s.]?d{3}[-s.]d{4}/x", $phone)) {
echo "Your phone number is ok.";
} else {
echo "Wrong phone number.";
}

验证IP地址

这是一个用来验证IPv4地址的实例。
$IP = "198.168.1.78";
if
(preg_match("/^(([1-9]?[0-9]|1[0-9]{2}|20-4|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|20-4|25[0-5])$/",$IP))
{
echo "Your IP address is ok.";
} else {
echo "Wrong IP address.";
}

验证邮政编码

这是一个用来验证邮政编码的实例。

$zipcode = "12345-5434";
if (preg_match("/^([0-9]{5})(-[0-9]{4})?$/i",$zipcode)) {
echo "Your Zip code is ok.";
} else {
echo "Wrong Zip code.";
}

验证SSN(社会保险号)

这是一个验证美国SSN的实例。

$ssn = "333-23-2329";
if (preg_match("/^[d]{3}-[d]{2}-[d]{4}$/",$ssn)) {
echo "Your SSN is ok.";
} else {
echo "Wrong SSN.";
}

验证信用卡号

$cc = "378282246310005";
if
(preg_match("/^(?:4[0-9]{12}(?:[0-9]{3})?|51-5{14}|6011[0-9]{12}|3(?:0[0-5]|68)[0-9]{11}|347{13})$/",
$cc)) {
echo "Your credit card number is ok.";
} else {
echo "Wrong credit card number.";
}

验证域名

$url = "http://ansoncheung.tk/";
if
(preg_match("/^(http|https|ftp)://(A-Z0-9(?:.A-Z0-9)+):?(d+)?/?/i",
$url)) {
echo "Your url is ok.";
} else {
echo "Wrong url.";
}

从特定URL中提取域名

$url = "http://ansoncheung.tk/articles";
preg_match("@^(?:http://)?(2+)@i", $url, $matches);
$host = $matches[1];
echo $host;

将文中关键词高亮显示

$text = "Sample sentence from AnsonCheung.tk, regular expression has become
popular in web programming. Now we learn regex. According to wikipedia, Regular
expressions (abbreviated as regex or regexp, with plural forms regexes, regexps,
or regexen) are written in a formal language that can be interpreted by a
regular expression processor";
$text = preg_replace("/b(regex)b/i", "1", $text);
echo $text;

对于开发人员来说,正则表达式是一个非常有用的功能,它提供了 查找,匹配,替换 句子,单词,或者其他格式的字符串。这篇文章主要介绍了15个超实用的php正则表达式,需要的朋友可以参考下。在这篇文章里,我已经编写了15个超有用的正则表达式,WEB开发人员都应该将它收藏到自己的工具包。

验证域名检验一个字符串是否是个有效域名

$url = "http://komunitasweb.com/";
if (preg_match("/^(http|https|ftp)://(A-Z0-9(?:.A-Z0-9)+):?(d+)?/?/i", $url)) {
echo "Your url is ok.";
} else {
echo "Wrong url.";
}

从一个字符串中 突出某个单词

这是一个非常有用的在一个字符串中匹配出某个单词 并且突出它,非常有效的搜索结果

$text = "Sample sentence from KomunitasWeb, regex has become popular in web programming. Now we learn regex. According to wikipedia, Regular expressions (abbreviated as regex or

regexp, with plural forms regexes, regexps, or regexen) are written in a formal language that can be interpreted by a regular expression processor";
$text = preg_replace("/b(regex)b/i", "1", $text);
echo $text;

突出查询结果在你的 WordPress 博客里就像刚才我说的,上面的那段代码可以很方便的搜索出结果,而这里是一个更好的方式去执行搜索在某个WordPress的博客上打开你的文件 search.php ,然后找到 方法 the_title() 然后用下面代码替换掉它

echo $title;

Now, just before the modified line, add this code:

$title = get_the_title();
$keys= explode(" ",$s);
$title = preg_replace("/(".implode("|", $keys) .")/iu",

"", 
$title); 

?>

Save the search.php file and open style.css. Append the following line to it:

strong.search-excerpt { background: yellow; }

从HTML文档中获得全部图片

如果你曾经希望去获得某个网页上的全部图片,这段代码就是你需要的,你可以轻松的建立一个图片下载机器人

$images = array();
preg_match_all("/(img|src)=("|")3+/i", $data, $media);
unset($data);
$data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media[0]);
foreach($data as $url)
{
$info = pathinfo($url);
if (isset($info["extension"]))
{

if (($info["extension"] == "jpg") || 
($info["extension"] == "jpeg") || 
($info["extension"] == "gif") || 
($info["extension"] == "png")) 
array_push($images, $url); 

}
}

删除重复字母

经常重复输入字母? 这个表达式正适合.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

删除重复的标点

功能同上,但只是面对标点,白白重复的逗号

$text = preg_replace("/.+/i", ".", $text);

匹配一个XML或者HTML标签

这个简单的函数有两个参数:第一个是你要匹配的标签,第二个是包含XML或HTML的变量,再强调下,这个真的很强大

function get_tag( $tag, $xml ) {
$tag = preg_quote($tag);
preg_match_all("{<".$tag."4>(.?)."}",

      $xml, 
      $matches, 
      PREG_PATTERN_ORDER); 

return $matches[1];
}

匹配具有属性值的XML或者HTML标签

这个功能和上面的非常相似,但是它允许你匹配的标签内部有属性值,例如你可以轻松匹配

function get_tag( $attr, $value, $xml, $tag=null ) {
if( is_null($tag) )
$tag = "w+";
else
$tag = preg_quote($tag);

$attr = preg_quote($attr);
$value = preg_quote($value);

$tag_regex = "/<(".$tag.")4$attrs=s*".

    "([""])$value2[^>]*>(.*?)/" 

preg_match_all($tag_regex,

     $xml, 
     $matches, 
     PREG_PATTERN_ORDER); 

return $matches[3];
}

匹配十六进制颜色值

web开发者的另一个有趣的工具,它允许你匹配和验证十六进制颜色值.

$string = "#555555";
if (preg_match("/^#(?:(?:[a-fd]{3}){1,2})$/i", $string)) {
echo "example 6 successful.";
}

查找页面 title

这段代码方便查找和打印 网页 之间的内容

$fp = fopen("http://www.catswhocode.com/blog","r");
while (!feof($fp) ){
$page .= fgets($fp, 4096);
}

$titre = eregi("(.*)",$page,$regs);
echo $regs[1];
fclose($fp);

解释 Apache 日志

大多数网站使用的都是著名的Apache服务器,如果你的网站也是,那么使用PHP正则表达式解析 apache 服务器日志怎么样?

//Logs: Apache web server
//Successful hits to HTML files only. Useful for counting the number of page views.
"^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)/5+?.html?)??((?#parameters)5+)? HTTP/[0-9.]+"s+(?#status code)200s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)6)"s+"((?#user agent)6)"$"

//Logs: Apache web server
//404 errors only
"^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)5+)??((?#parameters)5+)? HTTP/[0-9.]+"s+(?#status code)404s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)6)"s+"((?#user agent)6)"$"

使用智能引号代替双引号

如果你是一个印刷爱好者,你将喜欢这个允许用智能引号代替双引号的正则表达式,这个正则被WORDPRESS在其内容上使用

preg_replace("B"b(7+)b"B", "?1?", $text);

检验密码的复杂度

这个正则表达式将检测输入的内容是否包含6个或更多字母,数字,下划线和连字符. 输入必须包含至少一个大写字母,一个小写字母和一个数字

"A(?=[-_a-zA-Z0-9]?[A-Z])(?=[-_a-zA-Z0-9]?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}z"

WordPress: 使用正则获得帖子上的图片

我知道很多人是WORDPRESS的使用者,你可能会喜欢并且愿意使用 那些从帖子的内容检索下来的图像代码。使用这个代码在你的BLOG只需要复制下面代码到你的某个文件里


$szPostContent = $post->post_content;
$szSearchPattern = "~~";

// Run preg_match_all to grab all the images and save the results in $aPics
preg_match_all( $szSearchPattern, $szPostContent, $aPics );

// Check to see if we have at least 1 image
$iNumberOfPics = count($aPics[0]);

if ( $iNumberOfPics > 0 ) {
// Now here you would do whatever you need to do with the images
// For this example the images are just displayed
for ( $i=0; $i < $iNumberOfPics ; $i++ ) {

 echo $aPics[0][$i]; 

};
};

endwhile;
endif;
?>

自动生成笑脸图案

被WordPress使用的另一个方法, 这段代码可使你把图像自动更换一个笑脸符号

$texte="A text with a smiley ";
echo str_replace(":-)","
$str = "

jobbole其他字符 
sohu 
 

";

//echo preg_replace("/(?>)(?>)()/", "$2", $str);
echo preg_replace("/(?>)(?>)()/", "2", $str);
?>


0-9 ↩

/ ↩

""> ↩

> ↩

?" ↩

" ↩

"x84x93x94rn ↩

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22732.html

相关文章

  • PHP 正则达式入门 Getting Started with PHP Regular Expre

    摘要:兼容的正则表达式已经实现了很多使用不同解析引擎的正则函数。中主要有两个正则解析器一个称为,另一个称为兼容正则表达式。在中,每个正则表达式模式都是使用符合格式的字符串。 原文链接: Getting Started with PHP Regular Expressions Last-Modified: 2019年5月10日16:23:19译者注: 本文是面向0正则基础的phper, 很多...

    zhangke3016 评论0 收藏0
  • PHP 正则达式

    摘要:规范为的缩写,中文即兼容正则表达式,由开发的库,为很多现代工具所使用,大多数编程语言的正则表达式也都是集成该规范。接下来本文会对规范的正则表达式作出详细介绍。正则语法分隔符当使用函数的时候,模式需要由分隔符闭合包裹。 概述 正则表达式(Regular Expression)是一种字符匹配工具,通过构建具有特定规则的模式,和输入字符串数据进行比较,然后进行匹配、分割、替换等等的相关操作。...

    rozbo 评论0 收藏0
  • PHP/JS 常用的正则达式

    摘要:正则表达式的都是匹配和替换搜索正则表达式要匹配的字符串匹配到的字符串匹配到的个数,没有匹配到返回下面是例子执行一个正则表达式匹配,非贪婪执行一个全局正则表达式匹配,贪婪执行结果匹配所有仅由有一个单词组成的科目名输出结果替换正则表达式要匹 正则表达式的都是匹配和替换 PHP 搜索 preg_match* /** * int preg_match* ( string $pattern ,...

    mikyou 评论0 收藏0
  • PHP/JS 常用的正则达式

    摘要:正则表达式的都是匹配和替换搜索正则表达式要匹配的字符串匹配到的字符串匹配到的个数,没有匹配到返回下面是例子执行一个正则表达式匹配,非贪婪执行一个全局正则表达式匹配,贪婪执行结果匹配所有仅由有一个单词组成的科目名输出结果替换正则表达式要匹 正则表达式的都是匹配和替换 PHP 搜索 preg_match* /** * int preg_match* ( string $pattern ,...

    Simon 评论0 收藏0
  • php实战正则达式(二):提取html元素

    摘要:在阅读这篇文章前最好把同系列文章实战正则表达式一验证手机号先仔细阅读一遍。但实际上这样一个表达式是无法从上面的中提取第一个元素的这里主要的问题是在默认情况下点号字符无法匹配换行符。但是很遗憾,正则表达式中没有排除型子表达式或者说排除型分组。 这篇文章通过提取html元素介绍了正则表达式中模式修饰符、贪婪匹配与非贪婪匹配、Unicode模式、环视等知识点。在阅读这篇文章前最好把同系列文章...

    ityouknow 评论0 收藏0
  • PHP正则达式

    摘要:正则表达式是什么是一种字符串处理的工具搜索匹配搜索替换搜索分割功能强大是一种规则正则表达式应用范围数据验证数据处理过滤数据查询各语言都支持正则表达式相关函数正则表达式一个匹配返回匹配结果的次数执行一个全局正则表达式匹配返回匹配结果的次数 正则表达式是什么 是一种字符串处理的工具(搜索匹配、搜索替换、搜索分割) 功能强大,是一种规则 正则表达式应用范围 数据验证 数据处理/过滤 数...

    isaced 评论0 收藏0

发表评论

0条评论

Nekron

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<