在字符串php中找到第二次出现的char

unp*_*pix 8 php string

想象一下,我有这个字符串:

$info="portugal,alemanha,belgica,porto 1-0 alemanha, belgica 2-0";
Run Code Online (Sandbox Code Playgroud)

我想知道第二个字符" - "的位置,所以我希望结果2-0而不是结果1-0.

我正在使用这个功能,但它总是返回第一个位置,

$pos = strpos($info, '-');
Run Code Online (Sandbox Code Playgroud)

任何的想法?谢谢

Rij*_*ijk 20

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

$pos = strpos($info, '-', strpos($info, '-') + 1);
Run Code Online (Sandbox Code Playgroud)

但是,您可能希望研究使用正则表达式.

  • 不应该是"strpos($ info,' - ',strpos($ info,' - ')+ 1)"? (6认同)
  • 对于某些搜索字符串(`$needle`),您可能需要 `+ strlen($info)` 而不仅仅是 `+ 1`。 (2认同)

小智 9

试试这个

preg_match_all('/-/', $info,$matches, PREG_OFFSET_CAPTURE);  
echo $matches[0][1][1];
Run Code Online (Sandbox Code Playgroud)

  • 尽量不要只用一段代码来回答:添加一些解决方案的描述. (13认同)
  • 旧线程,但由于缺乏关于如何导航数据的解释,这基本上没有用,所以我将提供它:首先,PREG_OFFSET_CAPTURE标志将结果转换为捕获找到的字符串位置的数组.要获得第一场比赛,你将使用$ matches [0] [0],你将使用$ match [0] [2]等的第三场比赛.在这种情况下,$ matches [0] [1]获得第二场比赛.该匹配是(感谢PREG_OFFSET_CAPTURE)一个包含两个值的数组.$ matches [0] [1] [0]只返回找到的字符串(" - ").$ matches [0] [1] [1]返回该字符串的位置/偏移量. (3认同)