大佬教程收集整理的这篇文章主要介绍了php – 为给定的正则表达式创建所有可能的匹配集,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
例如:
所有这些例子,你可以假设他们以^开始,以$结尾
`Hello?` -> (Hell,Hello) `[1-9][0-9]{0,3}` -> (1,2,3 ...,9998,9999) `My (cat|dog) is awesome!` -> (My cat is awesome!,My dog is awesome!) `1{1,10}` -> (1,11,...,111111111,1111111111) `1*` -> //error `1+` -> //error `(1|11){2}` -> (1,111,1111) //notice how it doesn't repeat any of the possibilities
如果有一种方法来检索对正则表达式的唯一解决方案,或者有一种方法来确定正则表达式是否具有有限的解决方案,我也会感兴趣.
如果算法可以解析任何正则表达式,那么这将是很好的,但正则表达式的一个强大的子集将是正常的.
编辑:
我已经在我的正式理论课中学习了大约DFA,可以用来实现正则表达式(和其他常规语言).如果我可以将正则表达式转换为DFA,那么这个解决方案似乎对我来说很直接,但是这种转换对我来说似乎并不棘手.
编辑2:
感谢所有的建议,see my post about the public github project我正在努力“回答”这个问题.
这个问题的一个解决方案就是建立一个函数来标记和解析正则表达式,然后返回所有可能的匹配的数组.在这里使用递归将帮助你很多.
一个起点,伪码,可能看起来像:
to GenerateSolutionsFor(regeX): solutions = [""] for token in TokenizeRegex(regeX): if token.isConstantString: for sol in solutions: sol.append(token.String) else if token.isLeftParen: subregex = get content until matching right paren subsols = GenerateSolutionsFor(subregeX) for sol in solutions: for subsol in subsols: sol.append(subsol) else if token.isVerticalBar: solutions.add(GenerateSolutionsFor(rest of the regeX)) else if token.isLeftBrace: ...
以上是大佬教程为你收集整理的php – 为给定的正则表达式创建所有可能的匹配集全部内容,希望文章能够帮你解决php – 为给定的正则表达式创建所有可能的匹配集所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。