匹配自定义字符串与正则表达式

时间:2014-09-09 09:40:19

标签: regex string

我有一个字符串,我想用正则表达式分开:

这里是字符串

D200001test_test_SMARTPHONE

第一部分用(D \ d {6})覆盖 问题是只需要这部分。如果它不存在,其他所有内容都是空的。

我需要将此字符串拆分为(在此示例中) D200001(customerId) test_test(shopId) 智能手机(布局)

最后一句话(如果存在)只能是SMARTPHONE或TABLET

但解决方案也应该使用以下字符串:

$testStrings = Array('D200001', 'D200001test', 'D200001test_test', 'D200001test_', 'D200001test_SMARTPHONE', 'D200001test_test_SMARTPHONE');

我想出了这个:

preg_match_all('/(D\d{6})([0-9a-z-_)]{0,})(_TABLET|_SMARTPHONE){0,1}/i', $string, $result);

没有正确解析布局WORDS ..

3 个答案:

答案 0 :(得分:1)

以下内容应符合您的需求:

^(D\d{6})(.*?)(?:_(SMARTPHONE|TABLET))?$

Regular expression visualization

第一组包含customerId,第二组包含shopId(如果有),第三组包含布局(如果有)。

Debuggex的可视化,regex101上的演示。

答案 1 :(得分:1)

/^(D\d{6})([0-9a-z-_]*)(TABLET|SMARTPHONE)?$/i

问题是您的_TABLET | _SMARTPHONE组应该是可选的(使用?运算符)。这适用于给出的示例。

答案 2 :(得分:0)

D\d+|_(?!test|$)

试试这个。看看演示。

http://regex101.com/r/nG1gU7/11