使用正则表达式获取数据
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
函数从该字符串中捕获一些数据,但不太了解表达式
如何获得?
- 姓名
- ITEM_NAME
您应该使用 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
函数删除要删除的实例上的 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
我有字符串:
14:34:35 - Name:( NAME ) Level( 97 ) Item( ITEM_NAME ) Code( 50401280 ) Unique Number( 842332 13121779 ) Spec Code( 0 ) New( 1 )
我想使用 preg_match
函数从该字符串中捕获一些数据,但不太了解表达式
如何获得?
- 姓名
- ITEM_NAME
您应该使用 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
函数删除要删除的实例上的 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