使用正则表达式获取数据

时间:2015-06-28 21:31:45

标签: php regex preg-match-all

我有字符串:

  

14:34:35 - 姓名:( NAME)等级(97)物品(ITEM_NAME)代码(50401280)唯一号码(842332 13121779)规格代码(0)新(1)

我想使用preg_match函数从此字符串中捕获一些数据,但对表达式不了解

如何获得?

  • NAME
  • ITEM_NAME

1 个答案:

答案 0 :(得分:0)

您应该使用preg_match_allhttp://php.net/manual/en/function.preg-match-all.php,而不是preg_match。这样,您就可以遍历目标字符串中的所有带括号的值。

<?php
$string = '14:34:35 - Name:( NAME ) Level( 97 ) Item( ITEM_NAME ) Code( 50401280 ) Unique Number( 842332 13121779 ) Spec Code( 0 ) New( 1 )
        14:34:35 - Name:( NAME ) Level( 97 ) Item( ITEM_NAME ) Code( 50401280 ) Unique Number( 842332 13121779 ) Spec Code( 0 ) New( 1 )';
preg_match_all('~([a-z: ]+)\(\s*(.*?)\s*\)~i', $string, $values);
foreach($values[1] as $key => $data) {
    if(trim($data) == 'Name:' || trim($data) == 'Item') {
        echo $values[2][$key] . "\n";
    }
}

输出

  

NAME
  ITEM_NAME
  NAME
  ITEM_NAME

如果您希望开头或结尾的空格值取出\s*

您可以使用PHP trim函数删除要删除它的实例上的前导/尾随空格。

<?php
$string = '14:34:35 - Name:( NAME ) Level( 97 ) Item( ITEM_NAME ) Code( 50401280 ) Unique Number( 842332 13121779 ) Spec Code( 0 ) New( 1 )
        14:34:35 - Name:( NAME ) Level( 97 ) Item( ITEM_NAME ) Code( 50401280 ) Unique Number( 842332 13121779 ) Spec Code( 0 ) New( 1 )';
preg_match_all('~([a-z: ]+)\((.*?)\)~i', $string, $values);
foreach($values[1] as $key => $data) {
    if(trim($data) == 'Name:' || trim($data) == 'Item') {
        echo $values[2][$key] . "\n";
    }
}

演示:https://regex101.com/r/xG9tI3/2

进一步阅读正则表达式: http://www.rexegg.com/
http://www.regular-expressions.info/quickstart.html