gpt4 book ai didi

regex - 使用正则表达式等标准生成字符串

转载 作者:行者123 更新时间:2023-12-03 14:36:32 25 4
gpt4 key购买 nike

我想知道是否可以实现满足以下第二个想法要求的最佳字符串生成器类:

<小时/>

<罢工>

<罢工>

我对正则表达式感到不舒服:我无法想出一段起始代码,但我只是想到使用 TList 作为基类的简单实现,并使用过滤器(正则表达式)来对抗“暴力”生成的字符串。

其他最佳替代方案是什么?

<小时/>
  • 排序:首先按长度(最短的在前),然后按字典顺序。
  • 指定生成中使用的字符范围:所有可打印字符或 [A-Z]、[a-z]、数字、特殊符号以及最终空格(正则表达式?)的任何可能组合。
  • 字符串长度以给定的最小值/最大值为界。
  • 搜索空间受边界约束:开始字符串和结束字符串,可以过滤(正则表达式?)
<小时/>

上次编辑

首先,我使用类似的正则表达式而不是正则表达式重新表述了 header 。

我正在考虑修改第一个要求,因为它是一扇敞开的大门,可能会导致难以解决的问题

我需要有关正确措辞的建议和帮助。

第二个想法要求编辑完成。仍然欢迎改进建议。

最佳答案

老问题,但没有人回答它,赏金仍然有效,并且我已经准备好了解决方案,所以这里是一个可能的答案:

我曾经写过little program就是这样做的。然而,它是用 C++/Qt 编写的(虽然我几乎所有程序都是用 Delphi 编写的,但其中一个是用 C++ 编写的),不支持 Unicode 并且不保证顺序

其工作原理如下:

  1. 全部? {} + * | () 运算符被扩展(到最大限制),以便仅保留字符类和反向引用。

    例如[a-c]+|t*|([x-z]){2}foo\1|(a|b)(t|u) 变为 [a-c]|[a-c][a-c ]|[a-c][a-c][a-c]|[a-c][a-c][a-c][a-c]||t|tt|tt|ttt|ttt|([x-z][x-z])foo\1|at| au|bt|bu

    (后一个表达式中的 | 只是符号,程序将每个替代子正则表达式保留在列表中)

  2. 对多个字符的反向引用将替换为对单个字符的反向引用。

    例如上面的表达式变为 [a-c]|[a-c][a-c]|[a-c][a-c][a-c]|[a-c][a-c][a-c][a-c]||t|tt|tt|ttt| ttt|([x-z])([x-z])foo\1\2|at|au|bt|bu

    现在每个替代子正则表达式都匹配一个固定长度的字符串。

  3. 对于每个替代方案,都会打印从类中选取字符的所有组合:

    例如上面的表达式变为 a|b|c|aa|ba|..|cc|aaa|baa|...|ccc|aaaa|...|cccc||t|tt|tt|ttt|ttt |xxfooxx|yxfooyx|...|zzfoozz|at|au|bt|bu

您可能可以添加 Shortlex 订单保证,如下所示:

  1. 按字母顺序对类中的字符进行排序

  2. 对上述第 2 步中获得的替代方案进行长度排序

    (有指数级的多种选择,但通常它们的数量与结果字符串的数量相比可以忽略不计)

  3. 对字符类和反向引用进行排序/交换,以便每个引用都向后指向

  4. 像以前一样枚举单个固定长度替代方案的可能字符串,但从最后一个字符类开始,而不是从第一个字符类开始按字母顺序排序。

    (如果有任何指向前方的反向引用,这是行不通的)

  5. 如果有多个相同长度的替代项,则以“并行”枚举它们,比较它们当前的字符串并打印按字母顺序排列的最低字符串。 (即合并每个备选方案的已排序列表。)

    这可以优化,例如通过检测后缀中的不同前缀和安全字符类,可以在不影响排序的情况下枚举这些前缀和安全字符类。 (例如,a[a-z]|b[a-z] 具有不同的前缀,并且 [a-z] 可以在不进行任何比较的情况下进行枚举)

关于regex - 使用正则表达式等标准生成字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10033133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com