Php 查找字符串中第二个出现的字符

Php 查找字符串中第二个出现的字符,php,string,Php,String,假设我有这个字符串: $info="portugal,alemanha,belgica,porto 1-0 alemanha, belgica 2-0"; 我想知道第二个字符“-”的位置,所以我想要结果2-0,而不是结果1-0 我使用这个函数,但它总是返回第一个位置 $pos = strpos($info, '-'); 有什么想法吗?谢谢对于这种特殊情况,最简单的解决方案是使用以下参数: $pos = strpos($info, '-', strpos($info, '-') + 1);

假设我有这个字符串:

$info="portugal,alemanha,belgica,porto 1-0 alemanha, belgica 2-0";
我想知道第二个字符“-”的位置,所以我想要结果2-0,而不是结果1-0

我使用这个函数,但它总是返回第一个位置

$pos = strpos($info, '-');

有什么想法吗?谢谢

对于这种特殊情况,最简单的解决方案是使用以下参数:

$pos = strpos($info, '-', strpos($info, '-') + 1);

不过,您可能需要考虑使用偏移量参数。

您必须使用偏移量参数

$pos = strpos($info, '-', [offset]); 
它会很好地工作。

试试这个

preg_match_all('/-/', $info,$matches, PREG_OFFSET_CAPTURE);  
echo $matches[0][1][1];

offset
指定查找前要跳过的字符数,而不是要跳过的
pinder
出现次数。请不要仅用一块代码来回答:添加一些解决方案的描述。现在,为了理解,您将正则表达式“/-/”,因此字符“/”表示前后的一些字符,对吗?PREG_OFFSET_CAPTURE的含义是什么?为什么$matches[0][1][1]感谢您提供solutionOld线程,但这在很大程度上是没有帮助的,因为缺乏关于如何导航数据的解释,所以我将提供它:首先,PREG_OFFSET_CAPTURE标志将结果转换为捕获找到的字符串位置的数组。要获取第一个匹配项,您将使用$matches[0][0],第三个匹配项将使用$matches[0][2],以此类推。在本例中,$matches[0][1]获取第二个匹配项。该匹配(由于PREG_OFFSET_CAPTURE)是一个具有两个值的数组$匹配[0][1][0]只返回找到的字符串(“-”)$matches[0][1][1]返回该字符串的位置/偏移量。它不应该是“strpos($info,'-',strpos($info,'-'))+1”吗?刚刚测试过,即使该字符串包含零个或仅一个字符,它也能正常工作。e、 g:按预期返回false,没有错误。对于某些搜索字符串(
$needle
),您可能需要
+strlen($info)
,而不仅仅是
+1
。另请参阅