正则表达式括号表达式中转义字符\的有效性验证
测试Bash正则表达式中括号内的转义字符行为
为了搞清楚正则表达式^[-[:alnum:]\._]+$里括号表达式中的转义字符\到底起什么作用,我写了个简单的Bash脚本,用来验证输入是否是有效文件名:
# 验证输入是否为有效文件名 read -p "Enter a single item > " if [[ "$REPLY" =~ ^[-[:alnum:]\._]+$ ]]; then echo "'$REPLY' is a valid filename." else echo "The string '$REPLY' is not a valid filename." fi
已完成的测试步骤
- 执行脚本命令:
bash read_validate.sh - 输入测试内容:
test.tst. - 得到的反馈:
'test.tst.' is a valid filename.
这里值得注意的是,在Bash的括号表达式([])里,.本来就是普通字符,不需要转义,但脚本里写成\._也能正常匹配——转义后的.依然被当作普通字符处理,所以输入末尾的.被正则匹配到,判定为合法文件名。
接下来的测试计划
我打算继续测试包含\的输入内容,看看这个正则表达式会不会把反斜杠认定为合法的文件名字符。毕竟原正则里并没有把\列入允许的字符范围,理论上带\的输入应该会被判定为无效,不过还是得实际跑一遍测试才能确认。
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

