You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PCRE2正则表达式解析rsync命令行参数的需求咨询

解析rsync命令行选项的PCRE2正则表达式优化

需求说明

需要适配PCRE2正则,解析rsync的两类命令行选项:

  1. 短选项:以-开头,支持多选项合并(如-av)
  2. 长选项:以--开头,支持=赋值(允许=前后带空格,如--exclude-from = /path)
    同时要捕获命令末尾的源文件夹和目标文件夹参数。

优化后的正则表达式

(?:(-(?<short_opt>[a-zA-Z]+))|(--(?<long_opt>[a-zA-Z0-9-]+)(?:\s*=\s*|(?=\s))(?<long_val>(?:"[^"]*"|'[^']*'|[^\s]+))?)|(?<path>[^\s]+(?:\s[^\s]+)*))(?=\s|$)

正则结构拆解

  • 短选项匹配:(-(?<short_opt>[a-zA-Z]+))
    匹配-开头的短选项组,将选项名捕获到short_opt命名组(如-av会捕获av)。
  • 长选项匹配:(--(?<long_opt>[a-zA-Z0-9-]+)(?:\s*=\s*|(?=\s))(?<long_val>(?:"[^"]*"|'[^']*'|[^\s]+))?)
    • --(?<long_opt>[a-zA-Z0-9-]+):捕获长选项名到long_opt组(如--out-format)
    • (?:\s*=\s*|(?=\s)):兼容两种值分隔方式——带可选空格的=,或直接空格(无=的无值选项)
    • (?<long_val>(?:"[^"]*"|'[^']*'|[^\s]+))?:捕获长选项值,支持双引号/单引号包裹的含空格内容,或非空格字符;?标记值为可选(如--ignore这类无值选项)
  • 路径匹配:(?<path>[^\s]+(?:\s[^\s]+)*)
    捕获未被选项匹配的末尾参数,即rsync的源和目标路径,支持引号包裹的含空格路径。

示例测试

针对命令:

rsync    -av -t --out-format="%M %'10'b %f" --ignore-times   -i --exclude-from = /home/user1/myapppath/exclude.txt   --ignore --link-dest="/home/user1/myback2/abc/2024-09-11T16_55_45" source/abc dest/abc

匹配结果:

  • 短选项组:av、t、i
  • 长选项组:
    • out-format → "%"M %'10'b %f"
    • ignore-times → 无值
    • exclude-from → /home/user1/myapppath/exclude.txt
    • ignore → 无值
    • link-dest → "/home/user1/myback2/abc/2024-09-11T16_55_45"
  • 路径组:source/abc、dest/abc

注意事项

  1. 需确保PCRE2引擎开启命名捕获组支持
  2. 短选项仅匹配字母(rsync短选项无数字)
  3. 引号包裹的内容会完整捕获(包括引号本身,可后续处理去除)

内容的提问来源于stack exchange,提问作者user603749

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:50:54