regex - `{1}` 在正则表达式中有什么不同吗?
问题描述
在这个问题中,我回答了我认为完全多余的正则表达式egrep '^qu[a-z]{1}y$' filename.txt
包含的内容。{1}
在流行的正则表达式风格中是否存在任何情况(其中{n}
表示“前一项完全匹配 n 次。”)添加{1}
会改变行为?
这可能是有原因的,比如最初(可能在复制粘贴的代码中)有另一个数字被重新替换1
或自动生成的代码等,但我不是在谈论那个。
解决方案
不,它不应该改变行为。任何没有量词的模式只匹配一次,量词{1}
使前面的模式只匹配一次。所以它永远不应该有所作为。
我经常看到的其他多余的东西:
- 开始或结束一个正则表达式,
.*
如果它只是用于测试,而不是返回或替换匹配的部分。如果正则表达式可以匹配主题字符串中的任何位置,则测试将成功,您无需显式说明(除了某些正则表达式接口隐式锚定其模式,例如 Python 的re.match()
开头匹配,HTML 的pattern
属性具有隐式^
和$
锚点)。 - 量化正则表达式中的最后一个模式
+
是否只是用于测试。如果主题字符串与至少一个模式匹配,它也将与一个完全匹配。(如上所述,如果$
最后有一个隐式锚点,这不是多余的。)
推荐阅读
- java - Spring boot - 实体:如何添加 CreatedDate(UTC 时区感知)、LastModifiedDate(UTC 时区感知)、CreatedBy、LastModifiedBy
- symfony - Symfony 表单集合渲染是隐藏类型
- python - TypeError: apriori() 得到了一个意外的关键字参数“mini_support”
- ios - 无法将 Xamarin 构建的内容上传到 App Store
- ios - Google Admob 横幅广告在 swiftui 中不起作用
- sapui5 - SAP ALP Fiori Elements - 如何将圆环图可视过滤器中的段设置为 4 而不是默认的 3?
- linux - 无法在命令行上将 git 默认分支更改为 main
- flutter - 多行文本组件颤动
- django - Django AJAX 表单和 Select2
- php - Laravel 不发邮件或收不到邮件