标签=值的正则表达式

时间:2017-10-23 17:12:04

标签: php regex

我需要构建一个正则表达式来匹配这两种行:

  

1)SBNID = 304,MENAME = RV0714,MEID = 122,CELLID = 4,单元名= LRV0714D

     

2)MBTS_ACN1_RJ / ETHPORT:机柜编号= 0,机框编号= 0,插槽编号= 7,端口   编号= 0,子板类型= BASE_BOARD

输出必须是:对于第一个(1):

  

SBNID,MENAME,MEID,CELLID,CELLNAME

对于第二个(2):

  

机柜号,子架号,插槽号,端口​​号,配电板类型

PS:由于我的代码按时间处理每个输入,我需要首先处理输入一个,然后输入2,而不是两个一起

我已经尝试过:

(?<![^:,])[^=]+

适用于第二种情况,但对于第一种情况,它不会返回SBNID

我正在使用pcre(php)正则表达式

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的要求,您正在寻找键/值对。这可以通过

实现
(?P<key>\b[A-Za-z\h.]+)=(?P<value>\w+)

a demo on regex101.com

<小时/> 细分说明:

(?P<key>\b[A-Za-z\h.]+) # capture A-Z, a-z or horizontal whitespaces 
                        # into group "key"
=                       # = literally
(?P<value>\w+)          # capture A-Z, a-z, 0-9 and _ 
                        # into group "value"

<小时/> 在PHP中粘合在一起,这将是:

<?php

$string = "SBNID=304,MENAME=RV0714,MEID=122,CELLID=4,CELLNAME=LRV0714D
MBTS_ACN1_RJ/ETHPORT:Cabinet No.=0, Subrack No.=0, Slot No.=7, Port No.=0, Subboard Type=BASE_BOARD";

$regex = '~(?P<key>\b[A-Za-z\h.]+)=(?P<value>\w+)~';

preg_match_all($regex, $string, $matches, PREG_SET_ORDER);

foreach ($matches as $match) {
    print_r($match);
}

?>

请参阅a demo on ideone.com

答案 1 :(得分:1)

这适用于您的两个示例:

preg_match_all('/([\w\s.]+)=/', $string, $matches);
print_r($matches[1]);

如果您想要允许其他字符,则只需将它们添加到字符类[]中。

您可能希望修剪任何捕获的空格:

$result = array_map('trim', $matches[1]);