我在ruby代码中遇到了以下正则表达式,有人可以向我详细说明这个吗?
[\w-]+\.(?:doc|txt)$
特别是我认为我不清楚[\w-]+\
和?:
答案 0 :(得分:3)
这是一个或多个字母/数字/下划线/连字符的序列,后跟句点,后跟行尾的doc
或txt
。
[\w-]
是字母/数字/下划线/连字符。\.
是一段逃脱的时期。(?:
... )
是一个分组(需要表达doc
和txt
之间的选项),这些分组不会作为捕获的子字符串显示在结果中。< / LI>
可能是为了搜索扩展名为doc
或txt
的文件名而编写的,嵌入在多行字符串中。或者,如果该正则表达式的作者是愚蠢的(将$
误认为\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
序列$
匹配行尾