regex - 从hackerrank bash实践中获得的结果与我的实际bash不同
问题描述
我一直在做一些hackerrank实践,主要是关于grep shell命令。挑战要求我检测银行卡号码上的模式,即检测彼此相邻或中间有空格的一对数字。这是该模式的示例:
2[9][9][9] 5178 9101 2 34
我尝试了这个 ERE 正则表达式,它在我的 bash 上给出了适当的输出:
> grep -E '([0-9])([[:space:]]*)\1'
PS:Hackerrank 会自动将输入文件通过管道传递给 grep 命令
但是,我得到错误的输出,或者我严格地说(与我的操作系统 bash 不同的输出)
这是挑战链接:https ://www.hackerrank.com/challenges/text-processing-in-linux-the-grep-command-5/problem
我的问题是:
- Hackerrank 上的 bash shell 的工作方式与我的操作系统 bash shell 不同吗?如果是,那么有什么区别以及我可以依赖的任何资源。如果答案是否定的,那么为什么输出不同?
解决方案
出于某种原因,Hackerrank 需要在此处使用 POSIX BRE。
您可以使用
grep '\([0-9]\)[[:space:]]*\1'
grep '\([0-9]\) *\1'
grep '\([0-9]\)\s*\1'
\(...\)
用于在 POSIX BRE 正则表达式中定义捕获组。
推荐阅读
- php - 无法在 PHP 中以 PST 时间获取上周五日期
- laravel - Axios PUT 选项正常,但没有进行真正的调用(POST 确实有效)
- javascript - 为什么我从 jQuery 到 Velocity 的返回为空?
- clojure - Clojure deps.edn :deps 键是什么意思?
- spring - Using Tomcat in Production for Spring Boot apps
- aframe - Aframe:动画不适用于 mixamo 的 collada 模型
- python-3.x - 法语笔记本的一部分
- sql - 在 Google 表格查询中使用 TRIM
- html - runat="server" 和 vb.net 页面上的多种形式
- javascript - 在 foreach 循环中获取多个链接