使用正则表达式获取数据

Getting data with regex

我有字符串:

14:34:35 - Name:( NAME ) Level( 97 ) Item( ITEM_NAME ) Code( 50401280 ) Unique Number( 842332 13121779 ) Spec Code( 0 ) New( 1 )

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

如何获得?

您应该使用 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 函数删除要删除的实例上的 leading/trailing 空格。

<?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