regex - 如何编写允许不重复下划线的正则表达式
问题描述
我正在做一项家庭作业,以使用 Flex 创建词法分析器。我必须满足的最后一个要求是:
应修改标识符的定义,以便可以包含下划线,但是,不允许使用连续的下划线、前导和尾随下划线。
给定的正则表达式是[A-Za-z][A-Za-z0-9]*
. 让它识别下划线很容易,我只是将它添加到第二组中,例如[A-Za-z][A-Za-z0-9_]*
. 照原样,正则表达式不匹配任何带有前导下划线的字符串。
在进行尽职调查以确保我没有发布不需要的内容时,我创建了这个似乎有效的正则表达式[A-Za-z]([A-Za-z0-9][_]?[A-Za-z0-9])*
。这会在开头查找一个字母,然后是一个重复的模式或字母数字字符、可能的下划线和字母数字字符。虽然这可行,但我认为这不是预期的,并希望就任何更好的方法获得一些建议
我一直在使用以下字符串(由讲师提供)进行测试:
name_1
name__2
_name3
name4_
解决方案
在您[A-Za-z]([A-Za-z0-9][_]?[A-Za-z0-9])*
的第一个[A-Za-z0-9]
可以/必须省略(考虑例如单字母标识符),导致[A-Za-z]([_]?[A-Za-z0-9])*
. 这似乎正是所要求的,并且似乎是研究在正则表达式中重复组合可选元素的效果的一个很好的练习。
推荐阅读
- javascript - LEAFLET JS:在 MouseOver 上获取折线 ID
- javascript - 无法获取回调函数返回的所需对象
- facebook - 提高 Facebook Instagram Graph API 的速率限制
- javascript - 如何使用 js 和 html 无库构建产品滑块
- angular - AWS Lambda@Edge 查看器请求失败并显示“正文不是字符串、不是对象或超出最大大小”
- google-apps-script - 在 Google 表格中,是否可以将活动单元格的内容显示到另一个单元格?
- android - android studio Arctic Fox 2021.3.1 在gradle bar 中不显示#signing 报告| #SHA1 未显示问题已解决
- javascript - 无法将单击事件添加到在创建对象之前未创建的按钮
- .net - .net 5 在启动中将 AutoSaveChanges 设置为 false
- github - 如何在 GutHub 中分配来自不同团队的不同数量的 Pull Request 审阅者