优化检查文件名的正则表达式

优化检查文件名的正则表达式

我正在研究一个正则表达式,它将检查所提供的处理文件是否具有以下格式之一:

  1. SN1234_文件名.pdf
  2. SN1234_文件名.pdf.zip

这就是我现在所拥有的:

MYFILE="SN39586_invoice.pdf"  
ISZIP=0  
if [ $ISZIP -eq 0 ]; then  
    FORMAT='^SN[0-9]+\_[a-zA-Z0-9]+\\.pdf$'  
    else  
        FORMAT='^SN[0-9]+\_[a-zA-Z0-9]+\\.pdf\\.zip$'  
    fi

if [[ $MYFILE =~ $FORMAT ]]; then  
  # Do some processing  
  else  
  echo "invalid file format"  
fi

目前这是可行的,但我想摆脱设置 FORMAT 变量的 if-else 块。我该如何优化 FORMAT 变量?

答案1

使用?运算符,匹配前一个字符或组的零次或一次出现:

^SN[0-9]+_[a-zA-Z0-9]+\.pdf(\.zip)?$

相关内容