切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
2012-12-8(PHP正则表达式)[复制链接]
发表于 2012-12-8 22:26:03 | 显示全部楼层 |!read_mode!
php正则表达式
什么是正则表达式
正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
找了一圈资料  那些解释实在太难懂。。。。最后找到这句简单的
附带一份代码解释下正则表达式
    $email = "test@ansoncheung.tk";  
    if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)) {  
        echo "Your email is ok.";  
    } else {  
        echo "Wrong email address format";  
    }  
这段代码是验证  输入的E-MAIL是否符合格式。
函数ereg ---  正规表达比对
附带教程里使用的代码  
<?php

   $date="2008-12-12";   
   if(ereg("([0-9]{4}-([0-9]{1,2})-([0-9]{1,2}))",$date,$regs))
   {
       echo "$regs[3] / $regs[2] / $regs[1] <br>";
       echo "$regs[0] <br>";
       echo "$regs[1]年 $regs[2]月 $regs[3]日";
   }
   else
   {
       echo "不合法的日期格式: $date";
   }


?>
输出结果为
12 / 12 / 2008-12-12
2008-12-12
2008-12-12年 12月 12日
为什么第一行多了个-12-12  我很疑惑
还有ereg会报错  我找了下百度找到了原因 在这写一下
在php5.3环境下运行oscommerce,常常会出现Deprecated: Function ereg() is deprecated in...和Deprecated: Function ereg_replace() is deprecated in...这些类型的报错提示。
  其原因在于:php5.3以上的版本不支持ereg()函数,而是使用preg_match()函数;不支持ereg_replace()函数,而使用preg_replace()函数。
  解决方法:将不支持的函数修改为支持的函数即可。
时代在变  方法在变  技术也在变  所以自己的思路想法也要跟着变 要学着自己分析问题 找原因   
我将ereg改为preg_match
输出结果为
/ 12 / 12
2008-12-12
12年 12月 日
又少了点东西  我想preg_match函数和ereg用法肯定不一样  后面参数填写肯定不一样  所以导致换了函数  输出会少东西
我看了PHP手册  对它解释不是很明白  所以求详解
另外求Meta字符集 详解啊
好像很复杂的样子。


优点

      正则表达式在处理复杂字符操作的时候,可以提高工作效率,也在一定程度节省你的代码量。

缺点

       我们在使用正则表达式的时候,复杂的正则表达式会加大代码的复杂度,让人很难理解。所以我们有的时候需要在正则表达式内部添加注释。
echo ereg_replace上面有写到  这个函数现在新的版本已经不支持了改为下面那个了。
preg_replace()

<?php

  $string="This is a test. That is another Test.";
  echo ereg_replace(" is"," was",$string)."<p>";
  echo ereg_replace(" is","<B> is</B>",$string)."<p>";
  echo ereg_replace("test","<a href=http://vip.anq.com>vip</a>",$string);


?>
作用是寻找到对应字符   然后改掉它


关于本节课  未完待续、   
近几天有点小郁闷 , 总感觉时间不够用。




发表于 2012-12-9 14:42:24 | 显示全部楼层
  1. <meta http-equiv=Content-Type content="text/html;charset=gbk">
  2. <?php
  3. //获取百度的title内容
  4. $str = file_get_contents('http://www.baidu.com');
  5. //preg_match()返回pattern所匹配的次数.要么是0次(没有匹配)或1次,因为preg_match()在第一次匹配之后将停止搜索.
  6. preg_match('/<title>(.*)<\/title>/', $str, $arr);

  7. echo "<pre>";
  8. print_r($arr);
  9. echo "</pre>";

  10. echo "<hr>";
  11. echo $arr[1];
  12. echo "<hr>";

  13. //截取域名的一部分
  14. preg_match("/^(http:\/\/)?([^\/]+)/i", "http://www.baidu.com/index.php", $matches);
  15. echo "<pre>";
  16. print_r($matches);
  17. echo "</pre>";
  18. echo "<hr>";

  19. $host = $matches[2];        //从主机名中取得后面两段
  20. preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
  21. echo "<pre>";
  22. print_r($matches);
  23. echo "</pre>";

  24. echo "domain name is: {$matches[0]}\n";

  25. echo "<hr>";
  26. //在文本中搜索特定字符串
  27. // 模式定界符后面的 "i" 表示不区分大小写字母的搜索
  28. if (preg_match ("/3G-Sec/i", "Welcome to 3G-Sec.Com.")) {
  29.     print "3G-Sec was found.";
  30. } else {
  31.     print "3G-Sec was not found.";
  32. }


  33. ?>
复制代码


先看懂上面简单的例子中的正则表达式的语句语法的意思,再慢慢找你的正则哪里出的问题。
php中常见的正则表达式参见
http://www.oschina.net/code/snippet_570985_11077
http://www.cnblogs.com/zfying/archive/2012/03/02/2376908.html


关于Meta字符集确实很多但是常用的就是编码的设定,国内无外乎gbk或utf8了
还有是可以设定
Keywords
description
这两个是SEO用的
还有
http-equiv
Expires
Refresh
其他的我感觉就没啥用了
具体看一下
http://baike.baidu.com/view/953191.htm
不用特地去记,有时候抓包想知道啥意思或是构造post数据的时候可以再查查

正则其实挺重要的,在写exp的时候你可能会批量获取搜索引擎的结果过滤出来
包含特定标识的网站域名,不过这个有别人写过的只要能看懂会修改就好了。有时间
我给你找找





操千曲而后晓声,观千剑而后识器。

代码区

GMT+8, 2020-10-27 22:14

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部