Swift正则表达式含$符号的匹配问题及报错解决咨询
Swift正则表达式报错
quantifier '*' must appear after expression 解析与解决 报错含义
quantifier '*' must appear after expression 翻译为「量词'*'必须出现在表达式之后」。正则中的*是量词,作用是匹配它前面的表达式0次或多次,如果*前面没有任何可匹配的有效单元(比如单个字符、字符组、括号包裹的子表达式),就会触发这个错误。
你的测试问题分析与解决
1. 自定义matches方法的匹配异常
你测试的正则payment*$返回false,核心原因是***的作用范围仅局限于它前面的单个字符t**,这个正则的实际含义是:匹配以paymen(缺少最后一个t)加上0个或多个t结尾的字符串。但你的测试字符串结尾是$5.12,payment后还有大量内容,自然无法匹配。
如果你的需求是匹配包含payment且后续内容直至字符串结尾的场景,需将正则修改为payment.*$:
.代表匹配任意单个字符(默认不含换行).*代表匹配任意字符0次或多次$代表字符串结尾
修改后的测试代码:
extension String { func matches(_ regex: String) -> Bool { range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil } } let string = "payment a b c d add pdf pdf $5.12" string.matches(#"payment.*$"#) /// 返回true,符合预期
2. 在线测试工具的报错
你在在线工具遇到的quantifier '*' must appear after expression报错,本质也是相同问题:输入的正则中*前面没有对应的有效匹配单元。比如误写*payment(*在最前,无前置表达式)、或其他*位置错误的写法。解决核心是确保每个量词(*、+、?等)前都有明确的匹配单元,比如单个字符、字符组[a-z]、括号包裹的子表达式(abc)。
内容的提问来源于stack exchange,提问作者jacobcan118
相关产品推荐
相关产品推荐

