【问题标题】:Get all occurrences of a string between two delimiters in PHP获取PHP中两个分隔符之间所有出现的字符串
【发布时间】:2021-05-19 23:35:13
【问题描述】:

我正在使用 PHP 函数来获取字符串中两个分隔符之间的所有内容。但是,如果我多次出现该字符串,它只会选择第一个。例如,我将拥有:

|foo| hello |foo| nothing here |foo| world |foo|

并且代码只会输出“你好”。 我的功能:

function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = stripos($string, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = stripos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}

【问题讨论】:

  • 你用什么参数调用?预期的结果是什么?
  • 您的代码中没有循环。你如何期望它返回多个东西?
  • 字符串位置函数只返回他们找到的第一个匹配项。您可能想研究正则表达式。
  • 您可以使用strripos() 查找字符串的最后一次出现。用它来查找$end
  • 这能回答你的问题吗? Get string between - Find all occurrences PHP

标签: php string function strpos stripos


【解决方案1】:

只需使用preg_match_all 并保持简单:

$input = "|foo| hello |foo| nothing here |foo| world |foo|";
preg_match_all("/\|foo\|\s*(.*?)\s*\|foo\|/", $input, $matches);
print_r($matches[1]);

打印出来:

Array
(
    [0] => hello
    [1] => world
)

【讨论】:

  • 我觉得|foo|可能是分隔符,根据判断,代码只会输出“hello”。
  • @El_Vanja 那么我想我原来的答案是 foobar LOL!
【解决方案2】:

有点晚了,但这是我的两分钱:

<?php 
function between($string, $start = '|', $end = null, $trim = true){
  if($end === null)$end = $start;
  $trim = $trim ? '\\s*' : '';
  $m = preg_split('/'.$trim.'(\\'.$start.'|\\'.$end.')'.$trim.'/i', $string);
  return array_filter($m, function($v){
    return $v !== '';
  });
}
$test = between('|foo| hello |foo| nothing here |foo| world |foo|');
?>

【讨论】:

  • 感谢您的帮助,但运行时我没有得到任何输出。
  • 等等,抱歉。我只是忘了点击运行。大声笑
  • print_r($test);
猜你喜欢
  • 2021-04-04
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多