这是一个正则闯关网站:Regex Golf
网站有17个测试题目,每道题都分为左(需要匹配)和右(不需要匹配)列表,找到两边列表的每项的规律,然后在输入框填入符合匹配规则的正则表达式。
1. Plain strings
左边都有 foo
foo
2. Anchors
左边都是以 k 结尾
k$
3. It never ends – $ not allowed
左边都是以 fu 结尾,但不允许有 $。字符集 \b 匹配一个单词边界
u\b
4. Ranges
组成左边所有单词的字母都是在范围 a-f 内
^[a-f]+$
5. Backrefs
左边前三个字母会重复出现
(...).*\1
6. Abba
右边每个单词中有四个字母是回文。正向否定预查
^(?!.*(.)(.)\2\1)
7. A man, a plan
左边的每个单词都是一个回文,题目要求不超过13个字符
^(.)[^p].*\1$
8. Prime
左边的长度是素数。对右边的合数进行正向否定预查
^(?!^x?$|^(xx+?)\1+$)
9. Four
同一个字母隔着某个字符连续出现
(.)(.\1){3}
10. Order
①:左边列表的长度为 5 或 6 ,为6时最后一个字母不是 e
^.{5}[^e]?$
②:左边列表的长度为 5 或 6 ,并且排除掉以 o 开头。三种写法
^[^o].{4,5}$|^[^o].....?$|^[^o]?.{5}$
11. Triples
①:左边的项都是 3 的倍数
^([0369]|[147][0369]*[258]|([258]|[147][0369]*[147])([0369]|[258][0369]*[147])*([147]|[258][0369]*[258]))+$
②:不按规律来,写出每个数
(00[039]|12|015|50)$|1..?4|4.2|1.7|6.0|006
12. Glob
两边每一项都是 XXXXXX matches XXXXXXXXXX。区别就在于左边的
*代表了 1 个或以上的字符,而右边的*代表了 0 个或以上的字符
^((\w*)( .+ \2$|*(\w*)( .+ \2.+\4$|*.* .+ \2.+\4.)))
13. Balance
左边的括号成对
^(<(<(<(<(<(<<>>)*>)*>)*>)*>)*>)*$
14. Powers
左边的项是 2 的幂次长度
^(x|((xx){1,8})|x{32}|((x{64})+))$
15. Long count
8 个数为一对,每对的各前三位数都是一样的,每对的第一组数的最后一位一直是 0 。
-
^((.+)0 \2+1 ?)*$- 答案详解:
(.+)捕获组匹配每对的前三位数,(.+)0匹配前四位;\2获取第二个捕获组(.+)的值,\2+1匹配后四位。
- 答案详解:
16. Alphabetical
左边的项是所有按字典序排好的一串单词
( .+[ts]..)\1|(tat|r). r|a t|e .r
17. Powers 2
左边的项是 3 的幂次长度
^(x{81})+$|^x$|^(x{3}){1,9}$