【问题标题】:Php get string between tags [closed]PHP获取标签之间的字符串[关闭]
【发布时间】:2014-11-07 03:52:53
【问题描述】:

我得到一个这样的字符串,它是(Joomla 所有视频插件)

{Vimeo}123456789{/Vimeo} 

其中 123456789 是可变的,我该如何提取它? 我应该使用正则表达式吗?

【问题讨论】:

  • 是的,正则表达式会这样做。在这里试试:regex101.com.
  • 对,三个人点了这个?他们断言:“这个问题显示了研究工作,它是有用且清晰的”? (参见悬停文本)。

标签: php regex


【解决方案1】:

是的,你可以使用正则表达式。像这样:

preg_match_all('/{Vimeo}(.*?){\/Vimeo}/s', $yourstring, $matches);

【讨论】:

  • 中间正斜杠需要转义。更广泛地说,OP 没有付出任何努力,回答这些问题可能对社区没有好处。
  • @derdida 非常感谢!上述示例均不适用于我的场景,但您的示例可以。不要听halfer,如果您有其他解决问题的方法,请继续发布问题
【解决方案2】:

你可以这样尝试:

$string = '{Vimeo}123456789{/Vimeo} ';

echo extractString($string, '{Vimeo}', '{/Vimeo}');

function extractString($string, $start, $end) {
    $string = " ".$string;
    $ini = strpos($string, $start);
    if ($ini == 0) return "";
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}

【讨论】:

    【解决方案3】:

    如果你必须使用正则表达式,下面的方法可以解决问题。

    $str = 'foo {Vimeo}123456789{/Vimeo} bar';
    preg_match('~{Vimeo}([^{]*){/Vimeo}~i', $str, $match);
    var_dump($match[1]); // string(9) "123456789"
    

    这可能比你想经历的要多,但这里有一种避免正则表达式的方法。

    $str = 'foo {Vimeo}123456789{/Vimeo} bar';
    $m = substr($str, strpos($str, '{Vimeo}')+7);
    $m = substr($m, 0, strpos($m, '{/Vimeo}'));
    var_dump($m); // string(9) "123456789"
    

    【讨论】:

      【解决方案4】:

      如果堆积总是这样,你也可以用任何东西替换标签

      $string = '{Vimeo}123456789{/Vimeo}';
      str_replace(array('{Vimeo}', '{/Vimeo}'), '', $string);
      

      【讨论】:

        【解决方案5】:

        这里有另一个解决方案

        $str = "{Vimeo}123456789{/Vimeo}";
        
        preg_match("/\{(\w+)\}(.+?)\{\/\\1\}/", $str, $matches);
        
        printf("tag: %s, body: %s", $matches[1], $matches[2]);
        

        输出

        tag: Vimeo, body: 123456789
        

        或者你可以将它构建成这样的函数

        function getTagValues($tag, $str) {
            $re = sprintf("/\{(%s)\}(.+?)\{\/\\1\}/", preg_quote($tag));
            preg_match_all($re, $str, $matches);
            return $matches[2];
        }
        
        $str = "{Vimeo}123456789{/Vimeo} and {Vimeo}123{/Vimeo}";
        
        var_dump(getTagValues("Vimeo", $str));
        

        输出

        array(2) {
          [0]=>
          string(9) "123456789"
          [1]=>
          string(3) "123"
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多