我想知道如何找到一个正则表达式的所有匹配项,而且只有有限数量的匹配项。
例如:
所有这些例子都可以假设它们以“^”开头并以“$”结尾。
例如:
所有这些例子都可以假设它们以“^”开头并以“$”结尾。
`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,11,111,1111) //notice how it doesn't repeat any of the possibilities
如果有一种方法可以检索正则表达式的唯一解的计数,或者确定正则表达式是否具有有限解,我也会感兴趣。
如果算法能够解析任何正则表达式,那就太好了,但是正则表达式的一个强大子集也可以。
我对这个问题的PHP解决方案很感兴趣,但其他语言也可以。
编辑:
在我的形式理论课上,我学到了可以用来实现正则表达式(和其他正则语言)的DFA。如果我能将正则表达式转换为DFA,则解决方案对我来说似乎相当简单,但这种转换对我而言似乎相当棘手。
编辑2:
感谢所有建议,请参阅我关于公共Github项目的帖子,我正在努力“回答”这个问题。
/hel+o?/i
匹配Hello、Hell和Hel。但这并不等同于生成。 - tchrist语言无关
[即通用解决方案,适用于所有编程语言]还是php
[解决方案可以并且应该使用php工具]。另外:你假设使用ascii还是unicode?对于unicode,正则表达式“...”可能会有问题[太多可能性]。 - amit