我最初的直觉是,不,这样的库不存在,因为它是不可能的.您无法确定在合理的时间内是否可以为任意正则表达式找到有效输入.
例如,证明数字是否是素数被认为是难以解决的数学问题.以下正则表达式匹配任何长度至少为10000个字符且总长度为素数的字符串:
(?!(..+)\1+$).{10000}
我怀疑是否存在可以在合理的时间内找到该正则表达式的有效输入的库.这是一个非常简单的例子,有一个简单的解决方案,例如’x’* 10007将起作用.有可能提出其他正则表达式,这些表达式很难找到有效的输入.
我认为你要解决这个问题的唯一方法是将自己限制在所有可能正则表达式的某个子集中.
但是,如果你有一个神奇的库来生成与任意正则表达式匹配的文本,那么你需要做的就是生成一个匹配所有与原始表达式不匹配的字符串的正则表达式.
幸运的是,这可能是使用否定前瞻:
^(?![\s\S]*(?:^[abcd]d+))
如果您愿意将需求更改为仅允许有限的正则表达式子集,则可以使用布尔逻辑来否定正则表达式.例如,如果^ [abcd] d变为^ [^ abcd] | ^ [abcd] [^ d].然后可以在合理的时间内找到该正则表达式的有效输入.