java的正则的测试项 js正则(参考) toolbox
echarts画状态机 要自己给状态定位置 | 动态增减
只要保证每一步操作前后的状态转换表在任意状态下的任意输出相同就可以。
大步骤
1.
去掉反转义
2.
去掉最外层括号, 并记录括号到状态中.
3.
循环
1.
找到最小结构
1.
如果是括号就先找到右括号
2.
查看后缀, 如 * + ?
2.
如果 最小结构 后面不是|, 那就当成与结构处理
1.
否则 , 就把左边当成或的第一个结构, 在处理或的其余部分. ab|cd|e 的时候可以,
4.
处理 . * +
5.
[abc] 拆分成或结构
6.
[^abc] 原样带着
7.
去除空边 : 空边左右的两个状态合成一个.
8.
相同输入有多个输出状态的, 合并多个输出状态为一个状态, 然后把这个输入指向这个新状态, 并缓存一个新状态,避免多个相同状态出现.
1.
不管是新建一个新状态还是合成到已有的状态, 如果合成后的状态有对应input的自旋, 那么旧状态上的自旋就不用复制了,也就是不用再指向旧状态了. 不然会死循环
✅
a -1→ a
a -1→ b
b -1→ b
转换后
把a,b合成一个新状态c.
因为a上有1的自旋,所以b上的自旋不用复制到 c
9.
排序匹配顺序, 先匹配正常的, 再匹配 非 ,再匹配 .
10.
删除不可到达的状态
正则表达式 → DFA → NFA
(a|b)*abb
扫面最外层的结构, 括号里不算
扫描是 或 还是 与
然后拆分递归
((//.*?(\n|$))|
(/\*.*?\*/))|
([a-zA-Z_][a-zA-Z0-9_]*)|
(\d+)|("((\\")|.)*?")|
(\+\+|--|\+=|-\+|\*=|/=|&&|\|\||!=|==|>=|<=)|(\{|\}|\[|\]|\(|\)|\+|\-|\*|/|=|&|\||!|:|;|,|<|>|'|\"|\.)|(\b)
((//.?(\n|$))|(/\.?\/))
|([a-zA-Z_][a-zA-Z0-9_])
|(\d+)|("((\\")|.)?")
|(\+\+|--|\+=|-\+|\=|/=|&&|\|\||!=|==|>=|<=)|(\{|\}|\[|\]|\(|\)|\+|\-|\|/|=|&|\||!|:|;|,|<|>|'|\"|\.)|(\b)
评论区