我有字符串:
14:34:35 - 姓名:( NAME)等级(97)物品(ITEM_NAME)代码(50401280)唯一号码(842332 13121779)规格代码(0)新(1)
我想使用preg_match
函数从此字符串中捕获一些数据,但对表达式不了解
如何获得?
答案 0 :(得分:0)
您应该使用preg_match_all
,http://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