如何构造这个正则表达式?

时间:2016-04-26 08:23:22

标签: regex preg-match

如何使用正则表达式忽略下面表达式中的abc和def,01。我试着忽略我它不起作用。

  

Abc-def-smdp-01

2 个答案:

答案 0 :(得分:1)

一种方法是将原始字符串拆分为前缀,感兴趣的部分和后缀,然后删除词缀中不需要的字符:

$raw = "abc-def-smdp-01";

preg_match ( "/^(.*)(-smdp-)(.*)$/", $raw, $matches );    // separate original string into prefix, trunk, suffix  
$matches[1] = preg_replace ( "/[^-]/", "", $matches[1] ); // non-'-' characters deleted in prefix
$matches[3] = preg_replace ( "/[^-]/", "", $matches[3] ); // non-'-' characters deleted in suffixfix
$result = $matches[1].$matches[2].$matches[3]; // composing target string

echo $result;

可在线演示here

<强> NB

可以通过php函数库的一些知识轻松解决与此问题类似的问题,其中doc within the online php manual附带exakt语法,示例代码和用户注释。

在这种情况下,请查看:

当然,找到适合预期功能的候选人时,至少应该巧妙地掌握可用设施,这使得15分钟浏览hierarchical index明智的时间投入

答案 1 :(得分:0)

我会使用这种模式:

preg_match("/\w+\-\w+\-(\w+)\-\d+/", "Abc-def-smdp-01", $output);
Echo $output[1];

http://www.phpliveregex.com/p/ftB

编辑:或者你需要破折号吗? 在这种情况下,您需要使用此模式:"/\w+(\-)\w+(\-)(\w+)(\-)\d+/"
然后将其输出为:
echo $output[1].$output[2].$output[3].$output[4];
或者循环它并使用.=

构建一个字符串