美文网首页
learn.regex.2.md

learn.regex.2.md

作者: Gravition | 来源:发表于2019-12-12 16:55 被阅读0次

    贪婪 and 非贪婪

    这个语法用来描述自同构现象

    1. 非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。 例如,对于字符串 ooooo+? 将匹配单个 o,而 o+ 将匹配所有 o

    *+ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

    例如,你可能搜索 HTML 文档,以查找在 h1 标签内的内容。HTML 代码如下:

    <h1>RUNOOB-菜鸟教程</h1>
    

    贪婪:下面的表达式匹配整个<h1>RUNOOB-菜鸟教程</h1>

    /<.*>/
    

    非贪婪:下面的非贪婪表达式只匹配<h1>

    /<.*?>/
    

    也可以使用以下正则表达式来匹配 h1 标签,表达式则是

    /<\w+?>/
    

    通过在 *+? 限定符之后放置 ?,该表达式从"贪婪"表达式转换为"非贪婪"表达式或者最小匹配。

    定位符

    它们是特殊的一个 class,用来描述字符串或单词的边界

    ^$ 分别指字符串的开始与结束,
    \b 描述单词的前或后边界,\B 表示非单词边界。

    定位符使你能够将正则表达式固定到行首或行尾。
    它们还可以用来构造这样的正则表达式:
    出现在一个单词内、在一个单词的开头或者一个单词的结尾。

    正则表达式的定位符有:

    字符 描述
    ^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
    $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
    \b 匹配一个单词边界,即字与空格间的位置。
    \B 非单词边界匹配。

    注意

    1. 不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。
    2. 若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。
    3. 若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用 $ 字符

    example

    搜索章节标题

    下面的正则表达式匹配一个章节标题,该标题只包含两个尾随数字,并且出现在行首:

    /^Chapter [1-9][0-9]{0,1}/
    

    真正的章节标题不仅出现行的开始处,而且它还是该行中仅有的文本。
    它即出现在行首又出现在同一行的结尾。
    下面的表达式能确保指定的匹配只匹配章节而不匹配交叉引用。
    通过创建只匹配一行文本的开始和结尾的正则表达式,就可做到这一点。

    /^Chapter [1-9][0-9]{0,1}$/
    

    匹配单词边界稍有不同,但向正则表达式添加了很重要的能力。
    单词边界是单词和空格之间的位置。非单词边界是任何其他位置。
    下面的表达式匹配单词 Chapter 的开头三个字符,因为这三个字符出现在单词边界后面:

    /\bCha/
    

    \b 字符的位置是非常重要的。
    如果它位于正则表达式中 要匹配的字符串的开始,它匹配单词的开始处。
    如果它位于正则表达式中 字符串的结尾,它匹配单词的结尾处。
    例如,下面的表达式匹配单词 Chapter 中的字符串 ter,因为它出现在单词结尾边界的前面:

    /ter\b/
    

    下面的表达式匹配 Chapter 中的字符串 apt,但不匹配 aptitude 中的字符串 apt

    /\Bapt/
    

    字符串 apt 出现在单词 Chapter 中的非单词边界处,但出现在单词 aptitude 中的单词边界处。
    对于 \B非单词边界运算符,位置并不重要,因为匹配不关心究竟是单词的开头还是结尾。

    选择

    相当于数学逻辑关系中的And 或者 Or

    用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。
    但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。

    相关文章

      网友评论

          本文标题:learn.regex.2.md

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