我正在尝试从文本块之间的文件中获取名字和姓氏字段。我已经尝试过PHP,awk和Perl但是无法得到我想要的东西。
数据:
[ABC-001]
first=firstabc001
phone=sometext
last=sometext
[DEF-001]
phone=sometext
last=sometext
first=firstdef001
[ABC-002]
phone=sometext
first=firstabc002
last=sometext
[GHI-001]
first=firstghi001
phone=sometext
last=sometext
函数调用:get_firstname($ W = ABC,$ N = 002)
搜索并返回:firstabc002
我正在尝试创建一个PHP站点,它从我发送它的值中获取名字,因为值存储在一个平面文件中。
我不一定关心哪种语言可以做到这一点,只要我可以从PHP调用它(这应该不是问题)。
我已经尝试过PHP,awk和Perl但是无法使用它。
我只需要它来返回值。我不确定是否应该将平面文件作为一个大字符串,一个数组或循环读入并获取每一行,然后在到达[ABC-002]标题后逐步执行。
我已经尝试过在线正则表达式实用程序以及php preg_match,我无法使用array [n]来显示fisrtabc002结果
感谢那些提供帮助答复的人。我不知道parse_ini_(file | string)http://php.net/manual/en/function.parse-ini-file.php
当我进行进一步测试时,我会稍微标出最佳答案。
我喜欢perl和awk选项,因为我在不同的时间需要这些功能,现在它们都在我的技巧包里。
答案 0 :(得分:2)
解析它......
$sections = parse_ini_string($iniString, true);
foreach($sections as $section) {
echo "{$section['first']}\n";
}
如果您想要first
部分中的ABC-102
项,那么:
$sections = parse_ini_string($initString, true);
foreach($sections as $header => $section) {
if ($header === 'ABC-102') {
echo $section['first'];
break;
}
}
答案 1 :(得分:2)
使用parse_ini您可以编写类似的代码:
function get_firstname( $w, $n ){
$ini_array = parse_ini_file("test.ini", true);
if($ini_array["$w-$n"] AND $ini_array["$w-$n"]["first"]){
return "First Name:" . $ini_array["$w-$n"]["first"];
}else{
return "Not Found";
}
}
echo get_firstname("ABC","002");
//First Name:firstabc002
答案 2 :(得分:1)
前提是,我找到你了,你正在搜索以$ W开头的部分以$ N结尾的名字,我会在perl中这样做:
更新:根据上面的评论,您搜索以$ W开头并以$ N结尾的部分,即[$W-$N]
。
#!/usr/bin/env perl
use strict;
use warnings;
# set input record separator to an empty line:
$/ = "\n\n";
my $W = 'ABC';
my $N = '002';
while ( my $record = <DATA> ) {
if ( $record =~ /\[$W-$N\].*first=(.*?)\n/s ) {
print "first='$1'\n";
}
}
__DATA__
[ABC-001]
first=firstabc001
phone=sometext
last=sometext
[DEF-001]
phone=sometext
last=sometext
first=firstdef001
[ABC-102]
phone=sometext
first=firstabc002
last=sometext
[GHI-001]
first=firstghi001
phone=sometext
last=sometext
答案 3 :(得分:1)
使用awk
即可:
awk -F= -v W='ABC' -v N='002' '$0 == "[" W "-" N "]"{p=1}
p && $1 == "first"{print $2; p=0}' file
<强>输出:强>
firstabc002