Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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_Split_Extract - Fatal编程技术网

PHP正则表达式,在指定字符之间提取字符

PHP正则表达式,在指定字符之间提取字符,php,regex,split,extract,Php,Regex,Split,Extract,我无法用我的一生来理解我是如何在字符之间提取字符的 考虑一下这个字符串 $string = "sometext/#a=10/#b=25/moretext"; 我想做的是提取“a”和“b”(10和25)的值 因此,基本上我要做的是找到“#a=”并在下面的/”之前抓住所有内容,然后对b执行同样的操作。有谁能告诉我如何做到这一点 另外,如果有人知道他们可以推荐的任何可靠的正则表达式教程,我将非常感谢,我已经检查了nettuts、w3schools和php.net,它们都有很好的推荐,但任何其他推

我无法用我的一生来理解我是如何在字符之间提取字符的

考虑一下这个字符串

  $string = "sometext/#a=10/#b=25/moretext";
我想做的是提取“a”和“b”(10和25)的值

因此,基本上我要做的是找到“#a=”并在下面的/”之前抓住所有内容,然后对b执行同样的操作。有谁能告诉我如何做到这一点

另外,如果有人知道他们可以推荐的任何可靠的正则表达式教程,我将非常感谢,我已经检查了nettuts、w3schools和php.net,它们都有很好的推荐,但任何其他推荐都会很好。谢谢。

这对我很有用:

<?php

$string = "sometext/#a=10/#b=25/moretext/#varname=Hello World/evenmoretext/";

$matchcount = preg_match_all('@#([^=]+)=([^/]*)/@', $string, $matches);

for ($i = 0; $i < $matchcount; ++$i) {
    echo "{$matches[1][$i]} = {$matches[2][$i]}\n";
}
这对我很有用:

<?php

$string = "sometext/#a=10/#b=25/moretext/#varname=Hello World/evenmoretext/";

$matchcount = preg_match_all('@#([^=]+)=([^/]*)/@', $string, $matches);

for ($i = 0; $i < $matchcount; ++$i) {
    echo "{$matches[1][$i]} = {$matches[2][$i]}\n";
}
$string=“sometext/#a=10/#b=25/moretext”;
$expr='@#([a-z]+)=(.+?)/';
$count=preg\u match\u all($expr,$string,$matches);
$result=array();
对于($i=0;$i<$count;$i++){
$result[$matches[1][$i]]=$matches[2][$i];
}
回声“;
打印(结果);
回声“;

如果您真的想掌握正则表达式的基本原理,我可以推荐的最佳资源是

$string=“sometext/#a=10/#b=25/moretext”;
$expr='@#([a-z]+)=(.+?)/';
$count=preg\u match\u all($expr,$string,$matches);
$result=array();
对于($i=0;$i<$count;$i++){
$result[$matches[1][$i]]=$matches[2][$i];
}
回声“;
打印(结果);
回声“;


如果你真的想掌握正则表达式的基本原理,我能推荐的最好的资源是

我需要绝对提取字符之间的所有内容,甚至可以是符号。该方法仍然有效吗?是的,
([^/]*)
表示保持匹配除
/
之外的任何字符,因此它将匹配任何字符,并继续运行,直到它看到
/
,以使其更加健壮,我更改了正则表达式的第一部分,以匹配任何小于或等于
=
符号的字符,因此现在
=
前面的部分几乎可以是任何字符。@Ian这个答案实际上比我的好,唯一不同的是使用
for
循环将结果解析为关联数组,但实际上,这个表达式更好——正如drew所说,更健壮。你可以很容易地把我代码的最后一小段放在这里,从另一端得到相同的数据结构……谢谢你,我会重新选择这个作为最佳答案,并更改代码。我需要绝对地按原样提取字符之间的所有内容,甚至可以是符号。该方法仍然有效吗?是的,
([^/]*)
表示保持匹配除
/
之外的任何字符,因此它将匹配任何字符,并继续运行,直到它看到
/
,以使其更加健壮,我更改了正则表达式的第一部分,以匹配任何小于或等于
=
符号的字符,因此现在
=
前面的部分几乎可以是任何字符。@Ian这个答案实际上比我的好,唯一不同的是使用
for
循环将结果解析为关联数组,但实际上,这个表达式更好——正如drew所说,更健壮。您可以很容易地将我的代码的最后一小段放到这里,以从另一端获得相同的数据结构…谢谢,我将重新选择此作为最佳答案并更改代码。谢谢,这可能是我最终使用的方法。我肯定也会去那个网站看看。谢谢你,这是我最终可能使用的方法。我肯定也会去那个网站看看。