Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 模式匹配后在文件中单步执行_Php_Regex - Fatal编程技术网

Php 模式匹配后在文件中单步执行

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

我试图从文本块之间的文件中获取名字和姓氏字段。我尝试过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的在线正则表达式实用程序,但我无法让数组[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_文件一起工作,现在我需要将它放在函数包装器中