Lua:模式匹配和提取电话号码

我在 Lua 中遇到了以下需求的函数编制问题:

  • 以字符串 phone_number 和两位数的 country_code 为输入。
  • phone_number 采用以下格式 {1 || ""}{ country_code}{10 或 11 位的手机号码}

我需要输出 10 或 11 位的手机号码。

例子的输入和输出如下:

phone_number = "552234332344",country_code = "55" => "2234332344"

phone_number = "15522343323443",country_code = "55" => "22343323443"

谢谢!

点赞
用户563799
用户563799

尝试这个

^[0-9]{1,3}\s\|{2}\s[0-9]{10,11}$

这个表达式用于像你所要求的 1 || 9945397865 这样的模式. .

编辑过: 我想这样可以

  • 使用 string.len('552234332344') 获取字符串长度 => 输出: 12
  • 使用 string.match ('552234332344', ^%d) 匹配字符串 => 输出: 如果匹配则为552234332344
  • 使用 string.sub ('552234332344', 1, 2) 获取国家代码 => 输出: 55
  • 使用 string.sub('552234332344', 3) 获取电话号码 => 输出: 2234332344
2012-09-06 07:18:48
用户1442917
用户1442917

尝试使用 "(1?)(%d%d)(%d+)"。将其与您的示例一起使用:

print(("15522343323443"):match("(1?)(%d%d)(%d+)"))
print(("5522343323443"):match("(1?)(%d%d)(%d+)"))

将打印:

1   55  22343323443
55  22343323443

如果您需要电话号码精确为10或11个数字,则需要指定 %d 十次,然后添加 %d?%d 是一个字符类,用于匹配任何数字,问号修饰符匹配先前的字符或字符类 0 次或 1 次。

2012-09-06 08:00:13