You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:57:58