zoukankan      html  css  js  c++  java
  • 正则表达式

    refer: 

    https://deerchao.cn/tutorials/regex/regex.htm

    https://www.regextester.com/97209 在线测试

    https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

    一直以来都逃避正则,但写代码不会一点正则有时候真的很痛苦,所以还是得学一下最基本的. 这里做一下笔记呗.

    1. 

    如果我们想匹配一个单词. 比如 hi, 那么我们一定不希望它匹配到 his, hit 等等 

    那么我们可以加上 hi 这样就 ok 了. 它的逻辑是匹配的字前后不可以是字母或数字 (符号, 空格都是 ok 的)

    2. .     

    点匹配万物, 除了换行

    3. d  

    匹配数字, 小数点不匹配哦,不要傻傻的

    4. w

    匹配字母,数字, 汉字和下划线, 不要问我为什么跑出一个下划线来...

    如果不希望下划线,也可以用另一个写法 [a-zA-Z0-9] 但这个不匹配汉字

    5. s

    匹配空格和 tab

    6 ^ 和 $

    通常会一起用, ^ 是表示匹配第一个字符串开始. 比如 ^a 就是说第一个字一定要是 a 

    如果只是 a 那么意思是字符串里头只要有 a 就可以了, ^ 就只能是开头就要 a 

    $ 就是结尾. 

    所以我们验证一整个字符串通常就会用到这个了

    上面讲了匹配,接下来讲一下要求匹配的数量

    1. *

    0次或多次, 比如 aaa 如果我只是写 a 那么会有 3 给 match (每一个 match 里面一个字)

    而我写 a* 就只有一个 match 里面有 3 个字

    2. +

    1次或多次. 和 * 一样, 唯一区别是 * 可以 0 次,这个最少一次

    3. ?

    0次或1次, 就是有或没有. 重点不是数量了, 所以它是没有多次概念的

    4. {n} n 就是任你写一个数字. 要配个几个就几个

    5. {n,} n 个以上, 反过来是没有的哦 {,n} 《--这个是错误的

    6. {n,m} inclusive between n and m 

    再来说一下其它热门的

    1. 方括号[]: 方括号是单个匹配,如[abc]他限制的不是abc连续出现,而是只能是其中一个,这样写那么规则就是找到这个位置时只能是a或是b或是c; 
    方括号是正则表达式中最常用的,常用的用法有:[a-zA-Z0-9]匹配所有英文字母和数字,[^a-zA-Z0-9]匹配所有非英文字母和数字。

    这段抄来的. 我还没悟道, 之后再写.

    里面不是连环的,而是类似单个 or , 比如 [aeiou] 匹配的不是连续而是 a 或 e 或 i 或 o 或 u.

    另一个特点是 [.] 匹配的是 . 而不是任意字符, 但是 [s] 依然是匹配空格. 所以不能理解为里面没有元字符. 再研究

    2. | 

    或者 d{3} | abc 就是说 3 个数字或者匹配 abc 字符串

    3. 反义 not 

    S  s 以外

    W w 以外, 

    D d 以外

    [^aeiou] 加上 ^ 表示以外

    [^a-zA-Z0-9_s] 可以算是匹配符号

    4. (d) 圆括弧是把表达式抱起来用,和数学有点像. 

    然后就是这样写 (ab){2}  ab出现 2次, 如果是 ab{2} 那么只是 b 出现 2 次.

    (ab|cd) 配合 or 也是经常的用法

    5. 断言

    refer https://www.cnblogs.com/iyangyuan/archive/2013/05/30/3107390.html

    <title>dada</title>

    如果想匹配出 dada 而已, 那么就一定要用到断言了. 

    断言的功能是它可以写一些匹配,但是最终缺没有被匹配出来 

    像上面的表达是这样的

    我想找 .* whatever 但是前面必须是 <title> 后面必须是 </title>

    4 种断言写法 

    (?=X)

    (?<=X)

    (?!X)

    (?<!X)

    共同点是 (?)

    然后一种是等于(=), 一种是不等于(!)

    然后一种有箭头(<), 一种没有. 有箭头的是说断言放在前面. 没有的就放后面

    所以上面的写法是 

    step 1 : *. 匹配所有

    step 2 : (?<=<title>).* 断言在前面所有要箭头

    step 3: (?<=<title>).*(?=</title>) 断言在后面所以没有箭头

  • 相关阅读:
    ABP官方文档翻译 3.4 领域服务
    ABP官方文档翻译 3.3 仓储
    ABP官方文档翻译 3.2 值对象
    ABP官方文档翻译 3.1 实体
    ABP官方文档翻译 2.7 对象到对象的映射
    ABP官方文档翻译 2.6 定时
    bootstrap 源码中部分不了解的css属性
    vue 父组件调用子组件事件/子组件调用父组件方法
    js性能优化问题学习笔记
    js递归性能影响及解决方案
  • 原文地址:https://www.cnblogs.com/keatkeat/p/12799553.html
Copyright © 2011-2022 走看看