我需要构建一个正则表达式来匹配这两种行:
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)正则表达式
答案 0 :(得分:2)
如果我正确理解您的要求,您正在寻找键/值对。这可以通过
实现(?P<key>\b[A-Za-z\h.]+)=(?P<value>\w+)
<小时/>
细分说明:
(?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);
}
?>
答案 1 :(得分:1)
这适用于您的两个示例:
preg_match_all('/([\w\s.]+)=/', $string, $matches);
print_r($matches[1]);
如果您想要允许其他字符,则只需将它们添加到字符类[]
中。
您可能希望修剪任何捕获的空格:
$result = array_map('trim', $matches[1]);