Php 模式匹配后在文件中单步执行
我试图从文本块之间的文件中获取名字和姓氏字段。我尝试过PHP、awk和Perl,但无法得到我想要的 数据:Php 模式匹配后在文件中单步执行,php,regex,Php,Regex,我试图从文本块之间的文件中获取名字和姓氏字段。我尝试过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=firstg
[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的在线正则表达式实用程序,但我无法让数组[n]显示fisrtabc002结果
感谢那些为帮助提交答案的人。我不知道parse_ini(文件|字符串) 当我做进一步的测试时,我会在一点时间内标记出最好的答案 我确实喜欢perl和awk选项,因为我在不同的时候需要这些函数,现在它们就在我的技巧袋中 解析它
$sections = parse_ini_string($iniString, true);
foreach($sections as $section) {
echo "{$section['first']}\n";
}
如果您需要ABC-102
部分中的第一项
,则:
$sections = parse_ini_string($initString, true);
foreach($sections as $header => $section) {
if ($header === 'ABC-102') {
echo $section['first'];
break;
}
}
解析它
$sections = parse_ini_string($iniString, true);
foreach($sections as $section) {
echo "{$section['first']}\n";
}
如果您需要ABC-102
部分中的第一项
,则:
$sections = parse_ini_string($initString, true);
foreach($sections as $header => $section) {
if ($header === 'ABC-102') {
echo $section['first'];
break;
}
}
如果我说得对,您正在搜索以$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
#/usr/bin/env perl
严格使用;
使用警告;
#将输入记录分隔符设置为空行:
$/=“\n\n”;
我的$W=‘ABC’;
我的$N='002';
而(我的$record=){
如果($record=~/\[$W-$N\].*first=(.*)\N/s){
打印“第一个='$1'\n”;
}
}
__资料__
[ABC-001]
第一个=第一个ABC001
电话=sometext
last=sometext
[DEF-001]
电话=sometext
last=sometext
first=firstdef001
[ABC-102]
电话=sometext
第一个=第一个ABC002
last=sometext
[GHI-001]
第一个=第一个GHI001
电话=sometext
last=sometext
如果提供,我答对了,您正在搜索以$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
#/usr/bin/env perl
严格使用;
使用警告;
#将输入记录分隔符设置为空行:
$/=“\n\n”;
我的$W=‘ABC’;
我的$N='002';
而(我的$record=){
如果($record=~/\[$W-$N\].*first=(.*)\N/s){
打印“第一个='$1'\n”;
}
}
__资料__
[ABC-001]
第一个=第一个ABC001
电话=sometext
last=sometext
[DEF-001]
电话=sometext
last=sometext
first=firstdef001
[ABC-102]
电话=sometext
第一个=第一个ABC002
last=sometext
[GHI-001]
第一个=第一个GHI001
电话=sometext
last=sometext
使用awk
可以执行以下操作:
awk -F= -v W='ABC' -v N='002' '$0 == "[" W "-" N "]"{p=1}
p && $1 == "first"{print $2; p=0}' file
输出:
firstabc002
使用
awk
可以执行以下操作:
awk -F= -v W='ABC' -v N='002' '$0 == "[" W "-" N "]"{p=1}
p && $1 == "first"{print $2; p=0}' file
输出:
firstabc002
使用,您可以编写如下代码:
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
使用,您可以编写如下代码:
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
请向PHP或Perl代码显示您在“我正在尝试创建一个抓住名字的PHP站点…”方面遇到的问题,然后您应该寻找一个PHP解决方案,而不是Perl、awk或sed解决方案。我同意PHP解决方案,但我请求任何类型的帮助,因为我可以调用外部程序来获得我想要的结果。我试图吸引大众。至于我的PHP或Perl代码,我已经把大部分都刮了,因为我只是随风撒尿,随机尝试。你的问题我不清楚。请把它改成“我有这个”和“我需要这个”。还发布了一个“文件”的演示。请展示您遇到问题的PHP或Perl代码“我正在尝试创建一个抓住名字的PHP站点…”,然后您应该寻找一个PHP解决方案,而不是Perl、awk,或者sed解决方案。我同意php解决方案,但我请求任何类型的帮助,因为我可以调用外部程序来获得我想要的结果。我试图吸引大众。至于我的PHP或Perl代码,我已经把大部分都刮了,因为我只是随风撒尿,随机尝试。你的问题我不清楚。请把它改成“我有这个”和“我需要这个”。还发布了一个“文件”的演示。我不能用字符串获取它,但我让它与parse_ini_文件一起工作,现在我需要将它放在函数包装器中。我不能用字符串获取它,但我让它与parse_ini_文件一起工作,现在我需要将它放在函数包装器中