请教一个问题对于一个正则表达式,如果内容比较多,比如下面这个例子:/\w{1,5}[^a-e]5(\w{1,4}|d)d(?!0)|199[0-9\w]/虽然很简单,但是很难快速直观的解读。如果是下面的效果:显然,一下子就知道可以匹配到199y了。实现思路那么,我们如何实现呢?分析单词首先,我们需要将正则表达式切割成单个单词,按照如下算法:white(true){if)(|直接提取otherwiseif\escapeif[openalternativeif]放入备选内容,?=?!?:等特殊直接抽取如果{*+?最多是最少的,则应用到最后一个词;否则,普通文本,缓存(适当时抽取)}结果为:\w{1,5}[^a-e]5(\w{1,4}|d)d(?!0)|199[0-9\w]进行分组,然后用|,(and)三个特殊符号进行分组,类似到获取词的算法:\w{1,5}[^a-e]5\w{1,4}ordd?!0or199[0-9\w]如果用图表示:是不是和开头的内容有点相似,画完上面的结构,画的很简单,完整的实现已经提交到Github,可以点这里查看完整代码!
