正则表达式 如何根据某个条件是否成立,来选择匹配 2 个可选表达式中的其中一个。
高洛峰
高洛峰 2016-11-11 11:21:44
[PHP讨论组]

场景:原先有一个字符串的内容匹配,现在这个字符串改成了另一种样子。但是对于已经发版的客户端还要支持旧版的字符串匹配。

例:
旧字符串: android/360 1.0
新字符串: android/aaa/360/1.0

现在想写一个正则表达式,既想能匹配旧字符串,也想匹配新字符串。有没有办法根据某个条件成立,来选择其中一种表达式?

旧表达式匹配正则:
([iOS|android])\\scoco/([\\S\\s])\\s([\\S]*)
旧正则测试字符串
android coco/360 1.0

新表达式匹配正则:
"([iOS|android])[\\s|\\S]coco/([\\S])/([\\S])/([\\S])/([0-9])";
新正则测试字符串:
android coco/android_deviceId/360/1.0/123456

如何让一个正则,既可以支持新的,也可以支持旧的?

([iOS|android]*)[\\s|\\S]coco/[([\\S\\s]*)\\s([\\S]*)]  `**|**`  [([\\S]*)/([\\S]*)/([\\S]*)/([0-9])]

类似于上面这个错误的正则思路。 该如何写?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
欧阳克

最暴力的解决方案:用“或”(|)

优雅一些的方案:提取两个要匹配字符串的公有特点,写新的正则表达式兼容


三叔

你这样两个字符串差别已经很大了,就没有必要压缩到一个正则里了,直接分成两次正则判断更为妥当。

正则里没有根据条件来选择匹配规则的定义,像你这种情况用的还是 | 进行或匹配而已。其效果和使用两次正则没什么区别。


热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号