regex101 1-9关 通关笔记

task 1 : word boundaries(单词边界)

image
要求匹配 word 这个独个的单词。 /\bword\b/i

知识点

  • 忽略大小写 /i (insensitive)
  • 单词边界 \b 为边界 , \B 不为边界
    \B 在不消耗\w的情况下匹配\w
    image
    \b 在不消耗任何字符的情况下,立即被\w匹配的字符和不被\w匹配的字符匹配(按任何顺序)。它不能用来区分非词和词。
    image

task 2 : capitalizing i (大写字母i)

image
要求把 所有 的 单个的 i 变成 大写 I /\bi\b/I/g

知识点

  • 全部匹配而不是 只匹配一次 /g

task 3 : uppercase consonants (大写的辅音)

image
要求匹配大写的辅音字母
我的解法:/[B-DF-HJ-NP-TV-Z]/g 别人的解法:/[^AEIOUa-z_\W\d]/g

知识点

  • 字符分类
    image

task 4 : retrieve numbers (检索数据)

image
要求匹配 int 型 数字
我的第一次解法 /\D?\d+\D?/g 第二次 /\d+/g
知识点
贪婪与非贪婪,匹配个数
a? 零个或一个a
a* 零个或多个a
a+ 一个或以上a
a{3} 3个a
a{3,} 3个a以上
a{3,6} 3到6个a
a* 贪婪模式
a*? 懒惰模式
a*+ 侵占模式

task 5 : whitespace (空格)

image
配置4个以上的空格
我的第一次结果/[[:space:]]{4,}/g 我的第二次结果/\s{4,}/g

知识点

空白字符 \s[[:space:]]
匹配个数 a{4,} 4或更多个a

task 6 : broken keyboard (击毁键盘)

image
这关是说他按下一个键,有时候会被重复两次,但有时候不会,你需要把重复的那两次去掉。
我的答案 s/(.)\1\1/$1/g

知识点

\1 匹配时引用第一组
$1 替换时引用第一组

task 7 : validate an ip

image
大佬的答案 (?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\.(?!$)|$)){4}解释一下:匹配组重复4次:0-255的数字 + (.和不是结尾)|(结尾) 77分

我不会,百度一点后自己的解决方案 /^(?:(?:25[0-5]|2[0-4]\d|[0-1]?\d{1,2})\.){3}(?:25[0-5]|2[0-4]\d|[0-1]?\d{1,2})$/g 82分
然后按照大佬的规则稍微改进一下:/^(?:(?:25[0-5]|2[0-4]\d|[0-1]?\d{1,2})(?:\.(?!$)|$)){4}$/g 59分
最低的是 39分

知识点

| 0-199 | 200-255
121.005.154.138 是不是正规ip
image
(?:xxxx) 不要分配 gorup 号

Task 8: HTML Tags (optional) (HTML标签 任选)

image
从字符串中去掉所有HTML标记。有些可能会换行且不完整 例如 body>xxxx</body
<.*> 太贪婪了,匹配到<div>foo</div>
我的答案是s/<[^<>]*>|[^<]*>|<[^<]*/g
我好菜 啊。

Task 9: Match an E-Mail (Simplified) (optional) (匹配邮件 简化 可选)

image
我的解法:

/^([A-Za-z0-9!#$%&'*+\-\/=?^_`{|}~]+|[A-Za-z0-9!#$%&'*+\-\/=?^_`{|}~]+\.[A-Za-z0-9!#$%&'*+\-\/=?^_`{|}~]+)@(([A-Za-z0-9]+|[A-Za-z0-9]+-+[A-Za-z0-9]+)\.)+([a-z]){2,6}$/gi

posted @ 2021-08-27 17:54  Nestar  阅读(757)  评论(0编辑  收藏  举报