美文网首页JavaScript学习笔记
正则表达式学习笔记

正则表达式学习笔记

作者: Big丶Show | 来源:发表于2016-09-12 18:23 被阅读0次

    <p>最近开始转学php。语法已经学的差不多,但是感觉感觉php中好多东西还是灵活,还是需要项目的历练。
    回归主题,本来对于正则表达式我时充满恐惧的。但是老大说,搞php不懂正则表达式算什么。落泪……
    看过兄弟连正则表达式的三个教学视频后,粗略感觉难度一般,需要多写写就会了。在此也希望不会的同学不要太恐惧。并且,在各种语言中,正则表达式的写法基本一致,只需要调用各门语言中处理正则表达式的函数即可。</p>

    <h4> 正则表达式的格式</h4>

        `/原子和元字符/模式修正符号`
    

    <p>其中//为定界符,有些语言不需要定界符号。有些语言也不支持模式修正
    符号。</p>

    • 举例(通过html代码中筛选所有的图片地址):
      /<img(?:[&gt]*)\s*src=(?:'|")([&quot|']+)(?:'|")/

    <h4> 正则表达式的构成</h4>
    </br>

    • 定界符:
      <p>除了字母,数字 和正斜线 \ 以外的任何字符都可以为定界符号;比如 : ||//{}!!。</p>
    • 原子:
      <p>原子时正则表达式最基本的组成单位,而且必须至少要包含一个原子。是正则表达式可以单独使用的字符。它包含:所有打印字符(可以在屏幕上输出可见的字符) 非打印字符 (回车 空格)</p>
      <p><code></code>转义符
      所有有特殊意义的字符转移成没有特殊意义的字符。可以将一些没意义的字符转化为有意义的字符。
      一些常用特殊意义的字符:</p>

    \d 任意一个数字---012
    \D 任意一个非数字---- 与\d相对应
    \s 任意一个空白字符---\n \t \r 空格 回车
    \S 任意一个非空白-----与\s相对应
    \w 任意一个字 -------数字、字母大小写以及_(下划线)
    \W 任意一个非字------与\w相对应
    . 除了换行符意以外的任意字符

    <p>自定义原子表[]
    比如:[12345](有子字符串“12345”)、[a-z]字符串包含'a到z任意字母'、[5-8a-c]字符串包含数字58或字母ac。</p>

    • 元字符:
      <p>修饰原子用的,如果想要作为原子使用 加<code></code>转义。
      一些常用特殊意义的字符:</p>

    * 举例:/ab*c/---- a~c之间可以出现任意次b
    + 举例:/ab+c/ --a~c至少要出现一次b
    ? 举例:/ab?c/ --- a~c最多出现一次b
    注意:以上三种匹配方式,ac之间只能有若干个b,不能出现其他字符。

    <p></p>

    ^ 举例:/^on/ 放在正则表达式的第一个字符位置,字符串必须以on开头
    & 举例:/on$/放在正则表达式的最后一个字符位置,字符串必须以on结尾
    | 举例:/a|b/ 字符串中只要出现a或者b其中之一就好。

    <p></p>

    <p> {} :自定义原子出现个数</p>

    /ab{3}c/---a~c之间只能出现3个b
    /ab{2,5}c/-- a~c之间只能出现2到5次b
    /ab{2,}c/----a~c之间出现不小于2次的b

    <p></p>

    <p>\b(边界)与\B(无边界) </p>

    边界的定义:一个字符只要没有数字、字母、汉字、下划线,就是独立的一个字符,这个字符串的一侧有空白字符,则这一侧无边际。
    举例:
    $str=this is island;
    $regex=/\bis\b/; 此时匹配到的是中间的is
    $regex1=/\Bis\b/; 此时匹配到的是this中的is
    $regex1=/\bis\B/; 此时匹配到的时island中的is
    $regex1=/\Bis\B/; 此时匹配不到两边都是无边界的is。

    <p></p>

    <p>()</p>

    1.作为大原子使用。/abc*/匹配的时多个c,而/(abc)*/匹配的是多个abc
    2.改变优先级。|的优先级最低。/abc|def/匹配的是abcef或者abdef/ab(c|de)f/匹配的则是abcf或者abedf
    3.子模式以及反向引用。举例:时间日期 2016-9-12 也可以写作2016/09/12或者2016.09.12
    正则表达式:$regex = '/\d{4}(\W)\d{2}(\W)\d{2},(\w)就是一个子模式。
    如果需要保证年月与月日之间的符号一致,则可以这么写正则表达式
    $regex = '/\d{4}(\W)\d{2}\\\1\d{2}
    (\W)为第一个子模式(这个表达式也只有一个子模式)。将这个子模式作为判断第二个符号的依据\\\1(若\w-\\\1也代表-),数字1代表子模式的序数。

    <p></p>

    • 模式修正符:
      <p>位于正则表达式的右侧定界符之后,可以使用任意个,是对正则表达式的功能扩展。
      常用的模式修正符:</p>

    i 举例:/abc/i 不区分大小写匹配
    m 将字符串视为多行,任意一行都可以以正则开头。
    s 将多行视为1行。
    x 忽略模式中的空格。
    U 取消贪婪模式 。元字符.*?也取消贪婪模式 ,但是如果两个都使用的话就会同时失效


    <h4> 元字符的优先级(了解)</h4>
    数字越小优先级越高

    1.\
    2.()[]
    3.*+?{}
    4.^$\B\b
    5.|


    <p>写的匆忙,不够详细。
    附上兄弟连的正则表达式教学视频:http://i.56.com/lampbrother/videos</p>

    相关文章

      网友评论

        本文标题:正则表达式学习笔记

        本文链接:https://www.haomeiwen.com/subject/tmbpettx.html