生成正则表达式

2023-11-22

通常在我们的工作中我们会使用正则表达式capture or match运营。

但是,可以使用正则表达式(至少手动)来生成与正则表达式匹配的合法句子。当然,有些正则表达式可以匹配无限长的句子,例如表达式.+.

我有一个问题可以通过使用正则表达式句子生成算法来解决。

在伪代码中,它的操作如下:

re = generate("foo(bar|baz)?", max_match = 100);  #Don't give me more than 100 results
assert re == ("foobar", "foobaz", "foo");

什么算法可以为我执行此操作?


Microsoft 为此提供了基于 SMT 的免费(MSRL 许可)“Rex”工具:http://research.microsoft.com/en-us/downloads/7f1d87be-f6d9-495d-a699-f12599cea030/

来自“Rex:符号正则表达式浏览器”论文的简介部分:

我们将(扩展)正则表达式或正则表达式 [5] 转换为称为 SFA 的有限自动机的符号表示。在 SFA 中,移动由表示字符集而不是单个字符的公式来标记。 SFA A 被转换为一组(递归)公理,描述 A 接受的字符串的接受条件,并建立在字符串表示为列表的基础上。

由于 SMT 求解器可以输出一定大小范围内的所有可能的解决方案,这可能接近您正在寻找的结果。

在更统计和不太正式的方面,CPAN 的 Regexp::Genex 模块也可以工作:http://search.cpan.org/dist/Regexp-Genex/

你可以将它与这样的东西一起使用:

#!/usr/bin/env perl
use Regexp::Genex ':all';
my $hits = 100;
my $re = qr/[a-z](123|456)/;
local $Regexp::Genex::DEFAULT_LEN = length $re;
my %seen;
while ((time - $^T) < 2) {
    @seen{strings($re)} = ();
    $Regexp::Genex::DEFAULT_LEN++;
}
print "$_\n" for (sort %seen)[0..$hits-1];

根据需要调整时间和样本量。希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成正则表达式 的相关文章

  • 如何使用正则表达式将字符串分成相同字符的组?

    我有一个这样的字符串 var string AAAAAAABBBCCCCCCDD 并喜欢将字符串分割成这种格式的数组 same characters gt same group 使用正则表达式 Array AAAAAAA BBB CCCCC
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • [A-z0-9]+ 正则表达式匹配方括号[重复]

    这个问题在这里已经有答案了 我正在努力解决以下正则表达式 A z0 9 如果针对此字符串进行测试 a919238 a asd 它返回a919238 包括方括号 我尝试输入我在 regex101 上的测试用例 https www regex1
  • 检测两个正则表达式是否可能匹配相同的字符串[重复]

    这个问题在这里已经有答案了 给定两个正则表达式 是否可以检测是否存在与它们都匹配的可能字符串 例如 给定正则表达式A and 我可以看到那个字符串 A 匹配他们两个 这是一个简单的案例 我的问题是针对更广泛的情况 给定任何两个有效的正则表达
  • Oracle REGEXP_INSTR() 和“a-z”字符范围与预期不匹配

    我想用REGEXP INSTR 在 oracle 数据库中检查小写 大写字符 我知道 upper and lower POSIX 字符类 但我选择了a z这给了我非常奇怪的结果 我不明白 有人可以解释一下吗 SELECT REGEXP IN
  • 如何让 Vim 突出显示非 ascii 字符?

    我试图让 Vim 突出显示非 ASCII 字符 是否有可用的设置 正则表达式搜索模式或插件来执行此操作 在 a 中使用范围 搜索中的字符类 您应该能够excludeASCII 十六进制字符范围 因此突出显示 假设您有hlsearch启用 所
  • mysql 详细查询字符串,如通配符

    不知道如何标题我的问题 哈哈 下面是我需要的 我的数据库中的值如下所示 test example 1 test example 2 test example TD 1 这些值的长度可以不同 test example 只是一个示例 某些值将具
  • 正则表达式可以与 C++ 中的字符数组一起使用吗

    我正在开发一个无法使用字符串库文件的程序 而是使用字符数组 我能够使用正则表达式 并且想知道是否有办法使用正则表达式和字符数组 甚至正则表达式和单个字符 我问的原因是当我尝试在匹配中使用我的 char 数组时 xUtility 会抛出一堆来
  • Bash 正则表达式——似乎无法匹配任何 \s \S \d \D \w \W 等

    我有一个脚本试图从 gparted 获取信息块 我的数据如下所示 Disk dev sda 42 9GB Sector size logical physical 512B 512B Partition Table msdos Number
  • 如何使用 C# 查找文本中重复出现的词组? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在统计重复出现的字数字符串生成器 sb 我在互联网上找到了这段代码 据作者称 它与 Word 的字数计数器非常一致 StringB
  • 两个分隔符之间的字符

    尝试将正则表达式放在一起 返回 和 之间的字符串 其中 是字符串的结尾 input abc def ghi 期望的正则表达式结果 def ghi 我已经尝试了很多这样的组合 1 任何帮助表示赞赏 注意 上面的正则表达式返回 abc def
  • 验证 Salesforce ID

    有没有办法验证 Salesforce ID 也许使用 RegEx 它们通常是 15 个字符或 18 个字符 但它们是否遵循我们可以用来检查它是否是有效 ID 的模式 验证 salesforce ID 有两个级别 使用正则表达式检查格式 a
  • 从字符串中提取电子邮件地址

    我有一个像这样的字符串 Francesco Renga lt email protected cdn cgi l email protection gt 我只需要提取电子邮件 即 电子邮件受保护 cdn cgi l email protec
  • 正则表达式在 R 中同时多次包含字母/特殊字符时删除单词

    我想删除那些单词中字母 特殊字符的数量同时出现两次以上的单词 例如 输入就像 Google in theee lland of whhhat c c and e 输出应该是 Google in lland of c c and x lt G
  • Swift 中的 preg_match 等效项

    我尝试将 PHP 函数转换为 Swift 该函数用于根据 my 正则表达式将字符串格式化为另一个字符串 这就是我在 PHP 中所做的 preg match P 0 9 Y 0 9 M 0 9 D T 0 9 H 0 9 M 0 9 0 9
  • Javascript拆分正则表达式问题

    你好 我正在尝试我认为在 Javascript 中相当简单的正则表达式 但给我带来了很多麻烦 我希望能够通过 javascript 通过 和 分割日期 var date 02 25 2010 var myregexp2 new RegExp
  • Mongo 正则表达式用于“不匹配”或反向[重复]

    这个问题在这里已经有答案了 我的 mongo 文档都包含一个名为templateName 有一些包含该值的文档 a SystemDefaultTemplate b SystemDefaultTemplate c SystemDefaultT
  • perl 和 java 正则表达式功能之间有什么区别?

    perl 和 java 在支持哪些正则表达式术语方面有什么区别 这个问题仅涉及正则表达式 并且特别排除了how可以使用正则表达式 即使用正则表达式的可用函数 方法 以及语言之间的语法差异 例如java要求转义反斜杠等 特别令人感兴趣的是 j
  • 如何从java中的字符串中删除非数字字符? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一根很长的绳子 将数字拆分到数组中的正则表达式是什么 你是删除还是分裂 这将删除所有非数字字符 myStr myStr replaceA
  • 正则表达式 - 从字符串末尾搜索

    我如何从字符串末尾定位某些内容 complexthing 50 other 50 MORE 50 我想以 50 结尾 但是这个 复杂的东西 可以以 结尾 所以在这种情况下 我不能在 处打断 因为乞求可能会让它感到困惑 所以对我来说最简单的正

随机推荐

  • 更改整个应用程序中的按钮样式

    我正在尝试将应用程序中按钮的所有 TextColor 更改为白色 并尝试将其设为粗体 但这并没有发生 我正在覆盖the android Widget Button我正在开发 Jelly Bean 4 1 2 我究竟做错了什么 清单中的主题定
  • 直接从 AlarmManager 唤醒服务

    In the https github com commonsguy cwac wakeful演示中 调用 OnAlarmReceiver 广播接收器 的 onReceive 方法来响应警报 onReceive 方法启动服务 使用了两种 I
  • 如何在 LINQ 中使用 whereif

    大家好 有人可以帮助我如何在 LINQ 中最好地使用 whereif IQueryable
  • 如何调用返回 data.table 中多行和多列的函数?

    我想调用 data table 中的一个函数来计算一组汇总统计信息 如下所示 summ stats lt function vec list Min min vec Mean mean vec S D sd vec Median media
  • Python解压相对性能?

    太长了 的python 中可用的各种压缩算法 gzip bz2 lzma等 哪个有最好的减压表现 完整讨论 Python 3 有用于压缩 解压缩数据的各种模块包括gzip bz2 and lzma gzip and bz2此外 您还可以设置
  • 如何使用 angular.js 在标题元素中绑定数据

    我正在学习 Angular js 并且我设置了我尝试使用选择元素来改变它
  • 使用 java.exe 以静默模式执行

    我想知道是否有办法将 java exe 作为后台进程执行 静默模式执行 例如 java cp 我的类 arg1 我想将上述语句作为后台进程运行 而不打开命令窗口 在 Windows 下 使用javaw exe代替java exe See h
  • 将对象集合作为参数传递到 SQL Server 存储过程

    我有一个一般性问题 即是否可以做某事 以及这是否是最有效的方法 总结一下 我可以将对象集合作为参数传递给存储过程吗 假设我有一个名为的 SQL Server 表Users UserID Forename Surname 另一个表称为Hobb
  • Rails 7:如何完全删除 Turbo?

    我有一个 Rails 7 应用程序 经过一些开发后 我发现 Turbo Hotwired 产生了太多问题 我不需要它用于此应用程序 有没有办法从现有的 Rails 应用程序中完全删除 Turbo 建议的删除方法是什么 你需要删除gem tu
  • 如何在 JavaScript 中检查 XMLHttpRequest 对象是否支持 W3C 进度事件?

    有没有办法在 JavaScript 中检查是否XMLHttpRequest物体支撑W3C 进展事件 我的意思是这里如果设置onload onprogress onabort onerror等某些处理函数的属性将使这些函数调用这些事件 如所述
  • 在 perl6 语法中放松空白的最佳方法是什么?

    我想要一个在是否存在空格方面宽松的语法 我想匹配 this
  • 创建一个非常简单的链表

    我试图创建一个链接列表只是为了看看我是否可以 但我很难理解它 有谁有一个使用 C 非常简单地实现链表的示例吗 到目前为止我发现的所有例子都有点过头了 链表的核心是一堆链接在一起的节点 因此 您需要从一个简单的 Node 类开始 public
  • Makefile 始终运行目标

    我可能会错过这个 Makefile 中一些非常明显的东西 convert devel bar touch convert init devel foo echo init devel foo mkdir p devel touch deve
  • 读/写音频/视频文件的元数据

    我需要一些帮助来读取 写入音频 视频文件的元数据信息 我进行了很多搜索 但没有找到任何有用的东西 Taglib Sharp 是一个开源库 为读取 写入元数据提供帮助 使用标签库我可以编辑一些值 但不是全部 TagLib File video
  • 如何在 PHP 中显示取决于用户输入的长查询的 MySQL 错误? [复制]

    这个问题在这里已经有答案了 在 PHP 中 我尝试执行一个依赖于用户输入的长 MySQL 查询 但是 我的查询失败并显示以下消息 Query Failed 实际上 每当查询失败时 我都会打印此消息 但我很难查找此失败背后的原因 不幸的是 我
  • 来自存储在表中的值的 SQL 动态 SELECT 语句

    我已经研究了几天了 感觉自己在兜圈子 我有 SQL 的基本知识 但有很多地方我不明白 我有一个表 用于存储数据库中所有其他表的名称和字段 tblFields TableName FieldName BookmarkName Customer
  • 为什么除了没有捕获这个错误?

    我有一个程序可以模拟掷骰子并将它们与图表 一组字符串列表 中的值进行比较 我目前从 TEdit 获取值 如果该框为空 则会引发 EConvertError 该错误应该由我的 Try Except 语句捕获 但事实并非如此 想法和建议 下面的
  • 如何保护项目中的数据库配置文件? [复制]

    这个问题在这里已经有答案了 我已经创建了 php 文件来与数据库服务器建立连接 在这个文件中 我正在使用mysql connect 函数的参数为 我的数据库服务器的主机 用户名和密码 public class DatabaseConnect
  • 在网页上实时显示数据[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我不确定如何用最好的方式来表达它 但我正在寻找一种在网页可用时在网页上显示数据的方法 示例 在网页上显示 IRC 频道消息 当消息发送到 IRC 频
  • 生成正则表达式

    通常在我们的工作中我们会使用正则表达式capture or match运营 但是 可以使用正则表达式 至少手动 来生成与正则表达式匹配的合法句子 当然 有些正则表达式可以匹配无限长的句子 例如表达式 我有一个问题可以通过使用正则表达式句子生