Ruby 对下面的正则表达式有什么解释吗?

Ruby 对下面的正则表达式有什么解释吗?,ruby,regex,Ruby,Regex,我在ruby代码中遇到了以下正则表达式,有人可以向我详细介绍一下吗 [\w-]+\.(?:doc|txt)$ 特别是我认为我不清楚[\w-]+\和?:这是一个由一个或多个字母/数字/下划线/连字符组成的序列,后跟句点,在一行的末尾后跟doc或txt [\w-]是字母/数字/下划线/连字符 \。是一个转义句点 (?:…)是一个分组(用于表示doc和txt之间的选项),它不会作为捕获的子字符串出现在结果中 它可能是为搜索嵌入多行字符串中的扩展名为doc或txt的文件名而编写的。或者,如果该正则

我在ruby代码中遇到了以下正则表达式,有人可以向我详细介绍一下吗

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

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

这是一个由一个或多个字母/数字/下划线/连字符组成的序列,后跟句点,在一行的末尾后跟
doc
txt

  • [\w-]
    是字母/数字/下划线/连字符
  • \。
    是一个转义句点
  • (?:
    是一个分组(用于表示
    doc
    txt
    之间的选项),它不会作为捕获的子字符串出现在结果中

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

\w表示任何单词字符

在这个上下文中,减号仅仅意味着减号字符

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

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


为了清楚起见,作者应该略过负号。imho有一个在线正则表达式测试器,可在 您可以使用它来分析、验证或调试正则表达式字符串。这已经节省了我很多时间

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

/[\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

它表示仅包含单词字符(a-z、a-z、0-9和下划线)和连字符的文件名,扩展名为
.doc
.txt

具体地说,

  • \w
    匹配一个单词字符
  • [\w-]
    匹配单词字符或连字符
  • [\w-]+
    匹配一个或多个这样的字符
  • \。
    匹配一个句点
  • (?:)
    构成一个非捕获组
  • (?:doc | txt)
    匹配
    doc
    序列或
    txt
    序列
  • 在ruby中,
    $
    匹配一行的末尾

@DamianoStoffie对不起,我的回答不完整。现在它被修复了。@Drenmi不同的语言有不同的正则表达式语法。您需要说明您使用的是哪个regex变量。这个问题是关于Ruby和regex的。如果你不修改你的编辑,有人(包括我)会在某个时候修改它。@sawa:现在我们都把它放进去了,这样我们就可以确定它在那里了。:-)选民是否介意解释他/她的动机?