regex - 正则表达式仅匹配无或一
问题描述
我正在尝试将以下 if 语句与正则表达式一起使用,但遇到了一些问题:
if ! [[ $myText =~ ^[A-Z0-9]{5},[[:space:]]?[\ A-Za-z0-9]+$ ]]; then
echo "ERROR"
continue
fi
目标是允许但不允许(2 个空格及以上)YHG6D,test
。YHG6D, test
YHG6D, test
我想使用 ? 在 [[:space:]] 或 " " 之后会按照我的意愿将空间限制为无或一个,但它不起作用,因为我认为有 2 个空格也符合匹配标准。如果是这样,我如何从字面上限制匹配,以便如果逗号后没有空格或一个空格,它会运行代码,但如果逗号后有多个空格,则会引发错误?
而且,有人建议我"\"
在表达式前面添加,[A-Za-z0-9]
但不知道它的作用以及是否有必要。
解决方案
你的问题是\
其中[\ A-Za-z0-9]+
匹配一个空格。如果删除它,正则表达式会匹配逗号和单词之间的零个或一个空格:
^[A-Z0-9]{5},[[:space:]]?[A-Za-z0-9]+$
正如在https://regex101.com中测试的那样,这匹配YHG6D,test
and YHG6D, test
,但不匹配YHG6D, test
or YHG6D, test
。
此外,您不需要continue
在您的if
声明中:
if ! [[ $myText =~ [A-Z0-9]{5},[[:space:]]?[A-Za-z0-9]+$ ]]; then
echo "ERROR";
fi
以下是一些测试:
$ bash
$ myText="YHG6D,test"; if ! [[ $myText =~ [A-Z0-9]{5},[[:space:]]?[A-Za-z0-9]+$ ]]; then echo "ERROR"; fi
$ myText="YHG6D, test"; if ! [[ $myText =~ [A-Z0-9]{5},[[:space:]]?[A-Za-z0-9]+$ ]]; then echo "ERROR"; fi
$ myText="YHG6D, test"; if ! [[ $myText =~ [A-Z0-9]{5},[[:space:]]?[A-Za-z0-9]+$ ]]; then echo "ERROR"; fi
ERROR
$
每行的$
开头是 bash 提示符,因此从 复制命令myTest=...
并将其粘贴到 bash 终端进行测试。
推荐阅读
- android - 如何修复 java.lang.SecurityException 警告?
- android - Android TalkBack 反复说“服务 [我的应用名称]”
- javascript - 如何将数据传递到引导模式 django
- react-native - 未声明的基于商店的 React Navigation 导致警告
- javascript - 找到文本字段的特定id和类并document.write
- mysql - 错误:外键约束的格式不正确
- c# - 如何每 10 分钟在 datetime 上舍入分钟
- javascript - 仅加载图像/属性的大小,但不加载实际内容
- javascript - 为什么Vue没有初始化?
- ios - 仅在距当前位置 1 公里时列出数据库中所有位置的最佳方法?