以下正则表达式的任何解释?

时间:2016-01-10 14:49:30

标签: ruby regex

我在ruby代码中遇到了以下正则表达式,有人可以向我详细说明这个吗?

[\w-]+\.(?:doc|txt)$

特别是我认为我不清楚[\w-]+\?:

4 个答案:

答案 0 :(得分:3)

这是一个或多个字母/数字/下划线/连字符的序列,后跟句点,后跟行尾的doctxt

  • [\w-]是字母/数字/下划线/连字符。
  • \.是一段逃脱的时期。
  • (?: ... )是一个分组(需要表达doctxt之间的选项),这些分组不会作为捕获的子字符串显示在结果中。< / LI>

可能是为了搜索扩展名为doctxt的文件名而编写的,嵌入在多行字符串中。或者,如果该正则表达式的作者是愚蠢的(将$误认为\z),则可能只是将文件名与该扩展名匹配。

答案 1 :(得分:0)

https://regex101.com/有一个在线正则表达式测试程序 您可以使用它来分析,验证或调试正则表达式字符串。它已经为我节省了大量时间。

借助该工具自动详细说明您的正则表达式:

/[\w-]+\.(?:doc|txt)$/
        [\w-]+ match a single character present in the list below
            Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy]
            \w match any word character [a-zA-Z0-9_]
            - the literal character -
        \. matches the character . literally
        (?:doc|txt) Non-capturing group
            1st Alternative: doc
                doc matches the characters doc literally (case sensitive)
            2nd Alternative: txt
                txt matches the characters txt literally (case sensitive)
        $ assert position at end of the string

答案 2 :(得分:-1)

\ w表示任何单词字符

在这种情况下,

减去意味着减去char

(?:doc | txt)表示匹配doc或txt

所以任何单词char或减号重复一次或多次后跟一个点后跟doc或txt,并且该模式必须位于该行的末尾

作者应该为了清晰度而逃脱负面

答案 3 :(得分:-1)

这意味着文件名仅包含单词字符(a-z,A-Z,0-9和下划线)和连字符,并且扩展名为.doc.txt

详细说明,

  • \w匹配单词字符
  • [\w-]匹配单词字符或连字符
  • [\w-]+匹配一个或多个此类字符
  • \.匹配一段时间
  • (?:)形成非捕获组
  • (?:doc|txt)匹配doc序列或txt序列
  • 在ruby中,$匹配行尾