【问题标题】:Is (0-9) a valid regex expression in unix?(0-9) 是 unix 中有效的正则表达式吗?
【发布时间】:2018-07-19 18:41:37
【问题描述】:

[0-9] 表示包含单个数字。 (123) 表示包含数字 123(0123456789) 表示按该顺序包含所有这些数字。但是(0-9) 不是一个有效的表达式,对吧?范围内是否允许范围内?

【问题讨论】:

  • (0-9) 表示捕获组,字面意思是 3 个字符:零、减、九。
  • “但是 (0-9) 不是一个有效的表达式,对吧?” - 不,它是一个完全有效的正则表达式。 (...) 是一个捕获组,而不是一个范围。您可以随时将其插入在线正则表达式(例如 regex101.com)中自行查找。
  • 所有三个答案都被否决了。也许反对者会关心发布答案。
  • 是的,你能补充一些关于我们做错了什么的解释吗?谢谢

标签: regex linux unix terminal


【解决方案1】:
  • [0-9] 将匹配一个单个数字字符
  • 123 是匹配链 123 的正则表达式
  • 0123456789 是匹配链 0123456789 的正则表达式
  • 0-9 将匹配字符串 0-9 字面意思

现在,如果您使用括号,您正在使用 捕获组,您可以稍后在您的正则表达式或替换字符串中通过 \1 \2 引用它 \3 等分别用于第一、第二和第三捕获组。

您可以想象如果在其中使用 2 个相同的字符,则匹配字符串的正则表达式

(.).*\1

演示: https://regex101.com/r/nFwxRo/1

你有很多可能的反向引用和捕获组的用法,所以我相信如果你想使用正则表达式,它们是学习的基本概念

有关正则表达式的更多信息:

http://www.rexegg.com/regex-quickstart.html

测试你的正则表达式:

https://regex101.com/

正则表达式很酷,但乍一看可能有点困难!祝你好运

【讨论】:

    【解决方案2】:

    (0-9) 将匹配字符串 '0-9' 的字面意义。连字符/减号仅在字符集内使用(例如[a-z])。因此,它是完全有效的,但并不像你认为的那样做。

    【讨论】:

      【解决方案3】:

      有不同种类的正则表达式。 (0-9) 作为基本正则表达式或扩展正则表达式都是有效的,具有不同的含义。在这两种情况下,0-9 部分都不会被视为一个范围。

      在基本的正则表达式中(例如,grep 命令识别的类型),(0-9) 只匹配 5 个字符的序列:'(''0''-''9'')'.

      在扩展正则表达式中(例如,egrepgrep -E 识别的种类),(0-9) 匹配 3 字符序列 '0''-''9',括号表示分组(并且可能,根据上下文,捕获包含的组以在其他地方使用)。

      https://www.regular-expressions.info/posix.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 2011-09-17
        • 2011-10-10
        相关资源
        最近更新 更多