文章列表
近日看到一个学习正则表达式的,值得推荐,原址如下,仅供分享:
http://www.cnblogs.com/dragon/archive/2006/05/08/394078.html
最近遇到了一个异常:
Exception in thread "main" java.lang.StackOverflowError
经查阅,是源自于正则表达式在匹配过程中的回溯次数过多,从而出现了堆栈溢出。
因为在正则表达式的匹配过程中,需要不断地递归字符串,并根据你所写的正则表达式进行各种尝试与回溯。
因此,建议在利用正则表达式时,要保证正则表达式的高效,明白正则的匹配机制。
回溯
Backtracking
NFA引擎最重要的性质是,它会依次处理各个子表达式或组成元素,遇到需要在两个可能成功的可能中进行选择的时候,它会选择其一,同时记住另一个,以备稍后可能的需要。
需要做出选择的情形包括量词(决定是否尝试另一次匹配)和多选结构(决定选择哪个多选分支,留下哪个稍后尝试)。
不论选择那一种途径,如果它能匹配成功,而且正则表达式的余下部分也成功了,匹配即告完成。如果正则表达式中余下的部分最终匹配失败,引擎会知道需要回溯到之前做出选择的地方,选择其他的备用分支继续尝试。这样,引擎最终会尝试表达式的所有可能途径(或者是匹配完成之前需要的所有途径)。
真实世界中的例子: ...