1 正则是什么.
  请先看 http://www.phpchina.com/html/11/n-34811.html 几k 的解释后.

原地址已被更改,重新找了一个教程,请点击。 http://deerchao.net/tutorials/regex/regex.htm

2 实例剖析.
1.    $str = '<FORM&NBSP;NAME="ADFA"&NBSP;ACTION="ASDF.BPHP"&NBSP;TARGET=""><FORM&NBSP;NAME="BBBB"&NBSP;ACTION="HTTP: www.bac.com test.php? target="qwerqwerq"><FORM&NBSP;NAME="BBBB"&NBSP;ACTION="HTTP.PHP"&NBSP;TARGET="QWERQWERQ">'; 
2.        $match = ''; 
3.        preg_match_all('/\s+action=\"(?!http:)(.*?)\"\s/', $str,       $match); 
4.        print_r($match);
/\s+action=\"(?!http:)(.*?)\"\s/ 此正则是用来匹配 action=”xxx” 里面的xxx的.
可讲的地方有3
1  \”(.*?)\” 会匹配  aa”abb”aaaa”  字符串中的”abb””  而(.*)\” 则会去匹配aa”abb”aaaa”中的”abb”aaaa”. 此谓之贪婪(greedy) 特别实用。U 修正符可以反转正则式中的贪婪。
2 (?!http:) 代表将要匹配的内容中不含有http: 他本身不匹配内容.
例如 我要匹配一个 长为8-16里面不能有http 的字符串,就写 (?!http)\w{8-16} 即可。
3 就是这哥们匹配时,定死了action=” 后面的这个(“) 如果是 ‘ 号呢怎么办呢?
这里就要用到 反向引用了。
相关正则表达式如下。
(?<=\s*action=('|\"))(?!|http)(.*?)(?=\1)
  演化一下
最初的想法
  Action=\”(.*)\”  => 为能只匹配 action=”dddd” fdsfds” 中的action=”dddd”而不是action=”dddd” fdsfds” 更改为action=\”(.*?)\” =>要支持单引号action=(‘\”)(.*?)\1 => action 后面引号内不允许有http  action=(‘\”)(?!http:)(.*?)\1  => 只想提取引号内的内容,不想提取其它的内容. (?<=\s*action=('|\"))(?!http)(.*?)(?=\1)

文中还有两个例子挺实用的。
带断言的正则匹配
1.    $match = ''; 
2.       $str = '<A&NBSP;HREF="">xxxxxx.com.cn <b>ddddbolod</b>paragraph text
'; 
3.       preg_match_all ( '/(?<=<(\w{1})>).*(?=<\/\1>)/', $str, $match ); 
4.       echo "<BR&NBSP; />匹配没有属性的标签中的内容:"; 
5.       print_r ( $match );
正则式为(?<=<(\w{1})>).*(?=<\/\1>)
(?<=<(\w{1})>) 为逆向预匹配,就是说需要匹配的左边要满足这要求。
上php手册查了一下,preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);

然后表大式可以更改为(?<=<(\w+)>).*(?=<\/\1>)
替换HTML源码中的地址  
1.    $form_html = preg_replace ( '/(?<=\saction=\"|\ssrc=\"|\shref=\")(?!http:|javascript)(.*?)(?=\"\s)/e', 'add_url(\$url, \'\\1\')', $form_html );
这个也是单双引号的问题,需要改改.

2 看完帖http://www.phpchina.com/html/03/n-34203.html
觉得
function is_good_pw($pw) {
    if(preg_match('/(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}/', $pw)) {
        return true;
    }
    return false;
}
可以吸收一下。下面我决定啰哩啰嗦的解试一下这个函数。
.{8-16} 代表匹配8-16位非换行字符串。
可是当我们需要这8-16 位的数字中,必须有数字,而且有小写字母,而且有大写字母时,正则表达式如何去写呢?

(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}
匹配 必须有数字,小写字母,大写之母的 的8-16 位的字符.
1 基础概念讲解.
  1 理解缝隙的概念.
    例如, "^","$","\b"。它们都有一个共同点,那就是:它们本身不匹配任何字符,只是对 "字符串的两头" 或者 "字符之间的缝隙" 附加了一个条件
 2  ?=xxx) 正向预搜索 代表缝隙的右侧,必须能够匹配上 xxxxx 这部分的表达式
 
那么
(?=.*[\d]).{8-16} 代表匹配含有数字的8-16位的字符串,
如果是(?=\d).{8-16}则匹配的内容为首位为数字的8-16 的字符串.
如果是(?=\d{2}).{8-16}则匹配的内容为前两位为数字的8-16 的字符串.
从这里看来,正向预搜索需要理解的就是(?=xxx) 本身是不匹配字符的,而是给右侧的字符串添加条件,目的就是要右侧的字符串能满足这个预搜索条件。

.{8-16}  代表任意非换行的8 位字符串.
(?=.*[\d]).{8-16} 代表任意非换行的8-16 位字符串,而且这8-16位字符串中有数字。
(?=.*[\d]) (?=.*[a-z]).{8-16}代表任意非换行的8-16 位字符串,而且这8-16位字符串中有数字,而且这8-16位字符串中有a-z 之间的字母.
这样看来(?=.*[\d]).{8-16}的(?=.*[\d])就是用来向.{8-16}来叠加规则的.*[\d] 的
(?=.*[a-z]) (?=.*[\d]).{8-16} 中的(?=.*[a-z])就是用来向(?=.*[\d]).{8-16}叠加(?=.*[a-z])规则。
这样下来,当我们需要匹配的8-16位中间有数字而且有大写字母而且有小写字母,的时修就用到了(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}

此时,我们能匹配8-16 位的数字中,必须有数字,而且有小写字母,而且有大写字母
这时,如果要被匹配的字符串中不能出现 http 这时怎么处理呢?
答案很简单 加个正向否定预搜索就可以了
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?!http).{8,16}

下一个实例,货币替换.
1 理清思路,
货币替换对正则而言就是要找那些 距离结尾或[.] 隔着\d{3}+ 的\d
所以一开始就是(\d)(?=(\d{3})+($|\.\d*))
如果不希望回代后面的值,就用(\d)(?=(?:\d{3})+(?:$|\.\d*))
再补点预搜索条件(?=\d)(?!\.\d*) 是数字,而且不能以 .开头 最后就拼接成了.
(?<!\.\d*)(?=\d)(\d)(?=(?:\d{3})+(?:$|\.\d*))
附php代码.

<?php
$money_arr =  array(
    "0",
    "12",
    "123",
    "1234",
    "12345",
    "123456",
    "1234567",
    "123456789",
    "1234567890",
    "12.345",
    "123.456",
    "1234.56",
    "12345.6789",
    "123456.789",
    "1234567.89",
    "12345678.9",
    "sdsd12345678.9"
);
 
foreach($money_arr as $key=>$val)
{
    echo $val;
    $str = preg_replace("/(?=\d)(?!\.\d*)(\d)(?=(?:\d{3})+($|\.\d*))/","$1,",$val);
    echo "the replace result is";echo $str;
    echo "<hr/>";
}

function pr($arr){ //格式化输出数组.
    print("<pre>");print_r($arr);print("</pre>");
}
?>

下一例:
<img src=’xxx’>
<img src=’xxx’ />
<img src=’xxx’ > ddd</img>
当需要抓取这三种时,第三种的前面和第一种重复,则用 ? 来解决
<img[^>]>(.*<\/img>)? 即可

转载于:https://www.cnblogs.com/murain/archive/2010/03/31/1947265.html

进一步的去了解正则[一]相关推荐

  1. 从生命周期去看互联网金融产品的风险管理框架

    一.信贷消费的整体周期 消费信贷是一种特殊的产品,交易的标的是将来而非当下,未来的蛋糕透过时间机器被送到你的面前,当你张口啃下去时,往后的日子将会为蛋糕买单,而将来又会怎样呢,没人知道.我们对未来充满 ...

  2. python正则r的作用_Python正则表达式,这一篇就够了!

    原标题:Python正则表达式,这一篇就够了! 大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达 ...

  3. 浅谈 js 正则字面量 与 new RegExp 执行效率

    前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化篇>. 里面讲到了优化正则起到提升性能的问题,但是能提升多少 ...

  4. 正则匹配英文括号( 中文括号【 里面的内容 封装工具类

    前言 日常开发中遇到的一个需求: String msg="这是一个字符串,括号在后面(这是括号里面的内容,你能把我取出来吗?),括号在前面,第二个括号(咋咋咋),第三个括号[这是中文中括号] ...

  5. 详解通往Web3的护照:去中心化身份DID

    介绍 互联网的创建没有为人们提供本地身份验证层.由此,数字身份问题被纳入网站和应用程序范畴.这种方法可能适用于互联网的早期阶段,但现在线上有数十亿人,但缺点正变得越来越明显.用户名和密码仍占主导地位, ...

  6. TIP2022/去雾:Variational Single Nighttime Image Haze RemovalWith a Gray Haze-Line Prior具有灰色雾霾线先验的变分去雾

    0.摘要 受发光效果的影响,夜间冰雹移动是一项具有挑战性的不适宜的任务.现有的夜间除霾方法通常会导致发光伪影.颜色偏移.过度曝光和噪声放大.因此,通过统计分析和理论分析,我们提出了一种简单有效的灰霾线 ...

  7. 尝试做一个好的技术Leader, 建立“去中心化团队”

    前言 心中早已有将近几年的心中所想和收获以及实践付诸笔下做下整理,苦于不知道什么才是正确的方式,也困扰于1+1如何让大于2的问题,猛然回首,竟已惘然.思量再三,还是静下心来讲讲感悟心得,说不定若干年后 ...

  8. 无服务器人工智能去中心化,人工智能未来的发展方向是去中心化智能?

    原标题:人工智能未来的发展方向是去中心化智能? 随着AI人工智能在应用场景的爆发以及技术成熟推动下,将进一步向去中心化侧进行迁移,从而催生去中心化智能. 人工智能未来的发展方向是怎样的? 应用场景落地 ...

  9. 去耦电容和旁路电容的区别,终于有人说清楚了!

    去耦电容和旁路电容的定义 你们还在争论吗? 只要是设计过硬件电路的同学肯定对这两个词不陌生,但真正理解这两个概念的可能并不多. 一.名词定义: 旁路(bypass)电容:pass是通过的意思,bypa ...

最新文章

  1. 《网站分析师实战指南》一1.4 进入实战之路
  2. Dbvis数据库连接工具将查询出数据转化为sql插入语句方法
  3. android 上下扫描动画,Android扫描雷达动画
  4. [原]HAproxy 代理技术原理探究
  5. Struts2中指定的校验文件不起作用的原因
  6. SAP GraphQL console UI的实现原理
  7. 6.输入四个数,找出最大值方法二
  8. Bailian2899 Bailian3242 矩阵交换行【矩阵】
  9. doxygen 无法生成图片_设计稿智能生成代码如何识别组件?Imgcook 3.0 解析
  10. 计算机网络技术专业一体化课程方案,计算机网络技术专业网络设备的安装与配置...
  11. python kmeans聚类_K-means聚类算法的Python实现
  12. python中算法是什么意思_什么是算法?Python中的基础算法有几种?
  13. electron开发客户端注意事项(兼开源个人知识管理工具“想学吗”)
  14. halcon测量距离
  15. Lenovo windows 解决win键失灵
  16. 2022保育员(高级)考试模拟100题及在线模拟考试
  17. 基于原生JS项目使用Vue3 + Surely Vue Table组件
  18. [UNR #6]机器人表演
  19. DINE: Domain Adaptation from Single and Multiple Black-box Predictors
  20. 读 《成为技术领导者》 有感

热门文章

  1. IDEA mybatis-generator-maven-plugin 插件的使用
  2. Struts2_2_第一Struts2应用
  3. hdu 1161 Eddy's mistakes
  4. 深入Django(1): 通用视图 (generic views)
  5. 数据缺失的补充与修改
  6. C语言中的“”和“”
  7. 安装nginx及fastdfs-nginx-module
  8. python如何避免转义字符_如何解决因转义字符而报错的问题(在使用python导入文件时)...
  9. C语言中#define的用法(转)
  10. ajax 如何使 dropdownlist 无刷新,Jquery实现无刷新DropDownList联动实现代码