我什么时候应该使用解析器?

2024-03-28

我在正则表达式中遇到了将代码划分为功能组件的问题。它们可能会破裂,也可能需要很长时间才能完成。这段经历提出了一个问题:

“我什么时候应该使用解析器?”


当您对以下内容感兴趣时,应该使用解析器文本的词汇或语义意义,当模式可以变化时。当您只是想了解时,解析器通常是矫枉过正的匹配或替换字符模式,无论其功能含义如何。

就您而言,您似乎对文本背后的含义(代码的“功能组件”)感兴趣,因此解析器将是更好的选择。然而,解析器可以在内部使用正则表达式,因此它们不应被视为相互排斥。


然而,“解析器”并不自动意味着它必须很复杂。例如,如果您对 C 代码块感兴趣,您可以简单地解析嵌套的 { 和 } 组。该解析器只对两个标记(“{”和“}”)以及它们之间的文本块感兴趣。

然而,由于嵌套语义,简单的正则表达式比较在这里是不够的。采取以下代码:

void Foo(bool Bar)
{
    if(Bar)
    {
        f();
    }
    else
    {
        g();
    }
}

解析器将理解 Foo 的整体范围,以及 Foo 中包含的每个内部范围(if 和 else 块)。当它遇到每个“{”标记时,它“理解”它们的含义。然而,简单的搜索并不能理解文本背后的含义,并且可能将以下内容解释为一个块,我们当然知道这是不正确的:

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

我什么时候应该使用解析器? 的相关文章

  • 如何在 Objective-C 中使用正则表达式验证 IP 地址?

    如何在 Objective C 中验证 IP 地址 这是一个使用现代 inet pton 的类别 它将针对有效的 IPv4 或 IPv6 字符串返回 YES include
  • 具有可选小数点的十进制数的正则表达式

    我的要求是测试粘贴的数据 如果失败则不要粘贴 Regex d 0 4 d 0 2 使用的数据 1 2 tests true 1 2 3 test true as well 要求是 小数点前最小 0 最大 4 位小数点可以是点或逗号如果有小数
  • 带变量的 ansible regex_search

    如何在ansible playbook中使用正则表达式查找匹配项 其中变量出现在regex search争论 以下剧本在使用以下命令运行时找不到匹配项 ansible playbook playbook yml hosts localhos
  • PHP 正则表达式 [仅接受选定的字符]

    我想接受用户输入的字符列表并拒绝其余的 我可以接受格式化字 符串或查找是否缺少字符 字符串 但我如何才能只接受一组字符而拒绝所有其他字符 我想使用 preg match 来做到这一点 例如允许的字符有 a z A Z 用户必须能够以任何顺序
  • 如何解析具有多个小数点的字符串

    我想将诸如 10 0 20 之类的字符串解析为数字 以便比较 C net 中具有相同格式的另一个字符串 例如 我将比较这两个数字 看看哪个数字小于另一个数字 如果 10 0 30 我不确定应该使用哪种解析方法 因为在这种情况下 decima
  • 将正则表达式拆分为 2 个捕获组

    好吧 我之前的问题都得到解答了 我还有一个 这个对我来说比较难 A Za z A Za z0 9 domain com 现在这个表达式只产生 1 个捕获组 如 所示 我该如何为此 URL 执行 2 个捕获组 用于IIS正则表达式重写 您可以
  • 仅适用于数字和连字符的正则表达式

    我试图理解正则表达式 对于长度为 10 的数字我可以简单地做 0 9 10 对于连字符只有我能做 使用组表达式将两者结合起来将导致 0 9 10 该表达式无法按预期工作 如果字符串无效 它会以某种方式匹配字符串的一部分 而不是根本不匹配 如
  • 使用 bash 解析 ICS 文件

    这是一个谷歌日历 ics 文件 我每次都会下载它来检查是否有新的比赛事件被添加或更改 并且我出现在IRC上 我需要转换这样的文件 BEGIN VEVENT DTSTART 20160612T201000Z DTEND 20160612T21
  • 使用正则表达式从字符串中提取日期和时间

    我正在开发一个正则表达式 它接受所有可能的日期和时间格式 以从句子中提取它们 这是我的正则表达式 31 0 13578 1 02 Jan Mar May Jul Aug Oct Dec 1 1 30 0 1 3 9 1 0 2 Jan Ma
  • jQuery 替换 href 值但仅部分替换? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 jQuery 更改 href 参数 https stackoverflow com questions 6540106 change href parameter using jquery 我有
  • 将正则表达式扩展到负数

    我想将以下正则表达式扩展到负数 this value this value replace 0 9 g 我尝试添加减号 执行类似 0 9 g 的操作 但这允许在数字的任何位置输入减号 我只想允许数字开头出现一次减号 随后出现的减号应被忽略
  • 从 split 切换到 preg_split 时 php preg_split 错误

    在从 split 更改为 preg split 以获得 php 5 3 兼容性后 我从 php 收到此警告 PHP Warning preg split Delimiter must not be alphanumeric or backs
  • 正则表达式,获取两个关键字之间的整个字符串

    我正在做一些输出解析 我需要从两个单词之间抓取一大块文本 例如 如果我正在解析文本 Hi this is an example 我希望能够指定我的两个单词是 Hi 和 example 然后我将取回字符串 this is an 我知道正则表达
  • 英国日期正则表达式[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个验证英国日期格式的正则表达式 我有以下内容 0 1 9 12 0 9 3 01 0 1 9 1 012 19 20 d d 这对于验证非常有用 09 12 2011 但如果日期是 9 12 20
  • 如何删除 R 中字符向量中字符串的公共部分?

    假设一个字符向量如下 file1 p1 analysed samples txt file1 p1 raw samples txt f2 file2 p1 analysed samples txt f3 file3 p1 raw sampl
  • YouTube 视频 ID 的正则表达式

    我有以下代码可以从字符串中检测视频 ID 它实际上捕获了我需要的更多情况 我想让它更简单并仅返回以下格式的字符串的 id https www youtube com watch v 85PMSYAguZ8 https youtu be 85
  • preg_replace 和中文字符的奇怪问题

    我有这个奇怪的问题 经过 preg replace 后 一些汉字变成了时髦的字符 这是脚本 message strip tags mysql real escape string POST message img
  • 如何解释这个正则表达式 /[\W_]/g

    我的代码是 var result2 result replace W g replace replace 该代码有效 我得到了我需要完成的工作 但我不明白正则表达式如何 W g有效 但我找不到任何我理解的文档 g这是一个全局正则表达式 因此
  • 如何找到具有特定字符串但不在注释中的代码

    我试图在 1 000 个存储过程和函数中搜索特定字符串 在本例中为电子邮件地址 但当它位于注释块中时我想忽略它 这是查找对象的 SQL 语法 但有数百个结果 我不想遍历每个结果来确定电子邮件地址是在代码中使用还是仅在注释块中使用 SELEC
  • 如何将格式化的电子邮件地址解析为显示名称和电子邮件地址?

    给定电子邮件地址 Jim 电子邮件受保护 gt 如果我尝试将其传递给 MailAddress 我会得到异常 指定的字符串不符合电子邮件地址所需的格式 如何将此地址解析为显示名称 Jim 和电子邮件地址 电子邮件受保护 cdn cgi l e

随机推荐

  • Android:绝对布局?

    我是安卓新手 我喜欢在任何我想要的地方自由地绘制对象 所以我一直在使用绝对布局 我收到一条消息 要求使用不同的布局 我读到这是因为不同手机的分辨率不同 我的问题是 这是不使用绝对布局的唯一原因吗 我制定了一种使用指标来调整像素的方法 pub
  • UPPAAL 错误 - java.io.IOException:服务器连接丢失

    我正在学习形式验证 我应该使用我刚接触的 UPPAAL 但是 每次启动 UPPAAL 时 都会遇到以下错误 java io IOException Server Connection Lost 有什么办法可以修复这个错误吗 我在 64 位机
  • 将用户从 Google Checkout 映射到 Android 许可响应

    我正在使用 Android 许可 如下所述 http developer android com guide market licensing index html http developer android com guide mark
  • 使用php触发另一个php脚本,然后忽略

    我正在尝试弄清楚该怎么做是这样的 我有一个 php 文件 让我们调用trigger php运行一些 php 代码来启动我们将调用的另一个 php 文件backgroundProcess php开始处理 虽然trigger php需要忽略发生
  • 新手:“rake -T”时出现错误消息

    我在用红宝石企业版对于我的项目 当我检查我所有的耙任务通过运行命令rake T 我收到以下错误消息 You have already activated rake 0 9 2 2 but your Gemfile requires rake
  • Spring Security 访问因缺少角色而被拒绝记录

    对于 Spring Security 中的访问被拒绝登录 是否有开箱即用的解决方案 我想要的基本上是显示用户在收到访问被拒绝异常时缺少哪个角色 如果没有 我必须走上拥有自己的 accessDeniedHandler 的道路 如何访问在该控制
  • RESTful 资源和正交资源问题

    如果我使用的 3 层应用程序具有通过 HTTP 访问的中间层中的面向 RESTful 资源的服务 那么向 UI 层提供正交资源的最佳方式是什么 一个例子是 用户 资源 它具有一个国家 地区的字段 属性 现在在 UI 层中编辑用户时 我希望能
  • WordPress,使用 cookie 进行类别重定向

    我想要实现的目标 当用户访问该网站并选择特定类别时 他们下次访问该网站 回访用户 时 该页面将在该类别部分打开 我认为 通过在访问者单击类别链接 或加载类别页面时 时设置 cookie 这将相当容易做到 当它们返回以下时间时 将读取 coo
  • 在 Django/mod_wsgi 虚拟环境中配置 WSGIPythonHome 的问题

    我在 Windows 10 上运行 Python 3 7 1 和 Apache 2 4 38 我设置了一个虚拟环境 其中包含通过 pip 安装的 Django 2 2 5 和 mod wsgi 4 6 5 在 httpd conf 内部 我
  • 如何获取字符串中所有匹配的位置?

    我有一个专栏flag acumu在 PostgreSQL 的表中 其值如下 SSNSSNNNNNNNNNNNNNNNNNNNNNNNNNNNNSNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 我需要用 S 显
  • “user-images.githubusercontent.com”上的图像可以删除吗?

    我不小心在 GitHub 上上传了一张我不想放的图片 我原以为出于示例目的 我已经从上传的图像中删除了私人信息 但私人信息仍然存在 它包含诸如主机名之类的内容 我希望这些内容不是公开的 有没有办法从 github 的图像注册表中删除该图像
  • 到本地主机的 New-PSSession 失败

    我有一个打开本地主机远程会话的脚本 我需要这个来从登录脚本中在某些设备上安装 NuGet Username Admin Password ConvertTo SecureString adminPW AsPlainText Force ad
  • getElementsByClassName onclick 问题[重复]

    这个问题在这里已经有答案了 我在用着罗伯特 尼曼的 http robertnyman com 2008 05 27 the ultimate getelementsbyclassname anno 2008 脚本来获取文档中具有相同类的所有
  • 使用非 root 且无需 CPAN 安装 Perl 模块和依赖项

    我一直在为我的工作编写 Perl 脚本 而我工作的机器使安装 Perl 模块变得困难 我们不能有gcc出于安全原因 在我的机器上 所以对于大多数模块 我无法使用 CPAN 来安装模块 我无权访问 root 帐户 通常 当我想安装模块时 我会
  • 朱莉娅:当我有情节时如何找到最佳拟合曲线/方程?

    朱莉娅 当我有情节时如何找到最佳拟合曲线 方程 我有一个用地图绘制的图 但我需要找到一个适合这个的二次方程 正如评论中所说 情节在这里并不重要 只有数据本身是 您可以使用诸如GLM构建数据的 广义 线性模型 并可能绘制它们或使用它们来预测新
  • 请求的运行时 (python-) 不适用于此堆栈 (heroku-20)

    我在尝试通过 Heroku 部署这个 Flask 应用程序时遇到了困难 我研究了多种方法来解决这个问题 但似乎找不到一种可行的方法 这就是当我推动时我得到的git push heroku master remote gt Building
  • Dev-C++ 输入已跳过

    include
  • .NET 4.0 解决方案中的 NHibernate 1.2

    我有一些基于 NHibernate 1 2 的项目 我想将它们添加到 NET 4 0 解决方案中 但我收到 AmbigeousMatchException 无论这些项目是针对2 0还是4 0框架 如果我将它们添加到 NET 3 5 解决方案
  • 将刻度转换为时间格式 (hh:mm:ss)

    我从网络服务器获取视频长度值作为刻度 我想以 hh mm ss 格式显示它 我怎样才能在 JavaScript 中做到这一点 假设刻度以秒为单位 如果不是 您可以先将其转换为秒 您可以通过查找时间跨度中的整分钟数和小时数 然后获取剩余的秒数
  • 我什么时候应该使用解析器?

    我在正则表达式中遇到了将代码划分为功能组件的问题 它们可能会破裂 也可能需要很长时间才能完成 这段经历提出了一个问题 我什么时候应该使用解析器 当您对以下内容感兴趣时 应该使用解析器文本的词汇或语义意义 当模式可以变化时 当您只是想了解时