gpt4 book ai didi

php - 正则表达式匹配联系人组

转载 作者:行者123 更新时间:2023-12-04 13:06:39 24 4
gpt4 key购买 nike

我在尝试编写 PHP Regex 匹配模式来匹配字符串并将其拆分为所需的组时遇到问题。

情况是这样的……我有多个联系人字符串:

+35 00000000, info@company.com, www.company.com
这会给我:
第 1 组: +35 00000000,info@company.com,www.company.com

+35 00000000, +360000000, info@company.com, www.company.com
这会给我:
第 1 组: +35 00000000
第 2 组: +36 00000000,info@company.com,www.company.com

info@company.com, www.company.com
这会给我:
第 1 组:info@company.com,www.company.com

+35 00000000, info@company1.com, www.company1.com, +36 00000000, info@company2.com, www.company2.com
这会给我:
第 1 组: +35 00000000,info@company1.com,www.company1.com
第 2 组: +36 00000000,info@company2.com,www.company2.com

如您所见,这些字符串可以不同。我需要做的是将这些字符串拆分为联系人组,其中:

  • 通常以电话号码 (+) 开头,但并非总是如此并且只能包含一个
  • 如果没有提供电话,可以从网站链接或电子邮件开始
  • 可以包含多个不同公司的组

所以一开始我尝试匹配以电话号码开头并以网站结尾的组:

((\+?[\d ]+)?(, )?(.*)(, )?(www\.\w+\.\w{2,})?)

但这并不完全匹配。然后还尝试简化所有以电话号码开头的 Ant 匹配组:

(\+[\d ]+).*

但这匹配完整的字符串。

不得不说我是 Regex 的大菜鸟。我设法进行基本匹配,但这对我来说太难了。

模式的长度或低性能并不重要,因为这将是一次性执行。

最佳答案

您可以使用以下方式获得与预期组的匹配

(?=[^\s,])(\+?\d(?:[\d\s]*\d)?)?(?:(?:,\s*)?(\S+@\S+)\b)?(?:(?:,\s*)?(www\.\S+)\b)?

参见 regex demo .

请注意,(?=[^\s,]) 前瞻用于避免匹配空字符串。

详细信息:

  • (?=[^\s,]) - 下一个字符必须是逗号和空格以外的字符
  • (\+?\d(?:[\d\s]*\d)?)? - 一个可选的第 1 组:一个可选的 +,一个数字,然后是可选的零个或多个数字和空格,然后是数字
  • (?:(?:,\s*)?(\S+@\S+)\b)? - 可选出现
    • (?:,\s*)? - 可选的逗号和零个或多个空格
    • (\S+@\S+)\b - 第 2 组:一个或多个非空白,@,一个或多个非空白,一个单词边界
  • (?:(?:,\s*)?(www\.\S+)\b)? - 可选出现
    • (?:,\s*)? - 可选的逗号和零个或多个空格
    • (www\.\S+)\b - 第 3 组:www.,一个或多个非空白,单词边界。

关于php - 正则表达式匹配联系人组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69085829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com