我正在研究一个正则表达式,它将检查所提供的处理文件是否具有以下格式之一:
- SN1234_文件名.pdf
- 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)?$