给定一个子字符串,是否有办法生成所有可能的正则表达式(限制性最强,限制性最强),以匹配给定字符串的子字符串?
例如,假设你有一个子串“orange”和一个字符串“apple banana orange grape”。我如何得到一个匹配“橙色”的正则表列表(我知道会有很多;希望有一些库可以为我做这个)。
答案 0 :(得分:5)
这基本上与询问“给定一些运行时要求,是否有办法生成所有可能的程序(效率最高,效率最低),以满足给定输入的要求?”答案是是,有一个方式来做,但结果的数量是无限的,仅受合理内存和语言实现约束的限制,所以你需要对你的目的构成有效“程序”的限制,以便将其减少到一个有限的集合。
例如,您可以将自己限制为特定的语法,表示相关正则表达式语言的子集,并且只生成与该语法匹配的正则表达式:
Regex ::= StartAnchor? Anything? (Substring | Anything) Anything? EndAnchor? StartAnchor ::= "^" Anything ::= ".*" | "(.*)" Substring ::= "orange" | "(orange)" EndAnchor ::= "$"
递归地获取此语法的所有路径(即,由?
和|
指示的每个分支)以生成所有目标正则表达式。当然,这个答案故意没有说明这是一个好主意,还是根本不需要......