Swift中如何用正则匹配无小数点数字结尾带单个$符号的字符串
正确正则实现及说明
问题原因
你之前的写法存在三处问题:
- 未包含需要匹配的
$符号规则 - 仅支持单数字匹配,未覆盖多位数场景
- 没有对正则元字符
$做转义,也没有限制字符串结尾规则,会出现非法匹配
正确正则表达式
符合要求的正则写法为 ^[0-9]+\$$,各部分作用说明:
^:匹配字符串的起始位置,确保数字前没有多余字符[0-9]+:匹配1位及以上的纯阿拉伯数字,满足「无小数点的任意数字」要求\$:匹配字面量$符号,因为$在正则中本身是代表字符串结尾的元字符,需要加反斜杠转义才能匹配字符本身$:匹配字符串的结束位置,确保$后没有其他字符,避免匹配到1$Foo、12$$这类不符合要求的字符串
修正后的Swift代码
func isValidItem(_ item: String) -> Bool { let pattern = #"^[0-9]+\$$"# return item.range(of: pattern, options: .regularExpression) != nil }
效果验证
用你提供的示例测试:
- 匹配成功的项:
"1$"、"20$" - 匹配失败的项:
"Foo"、"Foo1"、"Foo$"、"$Foo"、"1Foo"、"1$Foo"、"12$$",完全符合需求
正则学习资源推荐
常用的优质学习资料如下:
- 入门级:《正则表达式30分钟入门》教程、《正则表达式必知必会》小册,适合快速掌握基础用法
- 官方参考:MDN 正则表达式文档、各编程语言官方正则相关文档,适合查询语法细节
- 练习工具:可以用各类在线正则测试工具辅助调试,实时查看匹配效果
内容的提问来源于stack exchange,提问作者Confused
相关产品推荐
相关产品推荐

