【问题标题】:regex rar archive正则表达式 rar 存档
【发布时间】:2018-04-17 09:03:14
【问题描述】:

我有这个正则表达式:

.*part0?0?1.rar

还有这个:

匹配

S01.rar
S23.part1.rar
s4.part01.rar
Movie.rar
Youtube Movie.part1.rar
123Mov Ddaa.part01.rar
123Mov Ddaa.part001.rar

不匹配

S01.part02.rar
S2.part4.rar
Movie.part3.rar
Youtube Movie.part08.rar
123Mov Ddaa.part002.rar

我用https://regexr.com/测试

如何匹配下的所有单词?对不起我非常糟糕的英语:/

【问题讨论】:

  • 你打算在 JavaScript 中使用该模式吗? regexr.com 仅支持 JS 正则表达式风格。
  • 即使你英文不好(我英文也不好),尽量把你的问题说清楚。

标签: regex bash rar


【解决方案1】:

原来你想在 Bash 中使用正则表达式。您需要的正则表达式将匹配任何包含part 的字符串,后面不带101001 以外的数字,即part 之后的数字必须大于1 并取反 结果。

Bash demo打印anything

file="Youtube Movie.part01.rar"
regex='part(0*[2-9][0-9]*|0*1[0-9]+)\.rar'
if ! [[ $file =~ $regex ]]
then
    echo "anything"
fi

这里,part(0*[2-9][0-9]*|0*1[0-9]+)\.rar 匹配

  • part - 文字子字符串 part
  • (0*[2-9][0-9]*|0*1[0-9]+) - 两种选择之一:
    • 0* - 零个或多个 0 字符
    • [2-9] - 从 29 的数字
    • [0-9]* - 任何 0+ ASCII 数字
    • |
    • 0*1[0-9]+ - 零个或多个 0 字符,1,然后是一个或多个任意数字
  • \. - 一个点
  • rar - rar 子字符串。

if ! [[ $file =~ $regex ]] 表示“如果$regex$file 不匹配,则显示anything”。

【讨论】:

  • (?=.*part0*[2-9]).+|(.+) 参加第一组。
  • 非常感谢。它在 regex101.com 上工作正常,但在我的 bash 中不起作用:file="S01.rar" if [[ ${file} =~ ^(?!.*\.part(?!0{0,2}1\ .)[0-9]+\.rar$).+ ]] 然后回显 "match" fi
  • 抱歉,我不知道有什么区别。我应该再问一遍我的问题吗?
  • @xtrars 或许part(0*[2-9][0-9]*|0*1[0-9]+)\.rar会更好,它也会允许part100part011
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2011-02-20
相关资源
最近更新 更多