PHP preg_match之间获取内容

时间:2014-02-12 17:34:14

标签: php regex preg-match

<!--:en-->Apvalus šviestuvas<!--:-->
<!--:ru-->Круглый Светильник<!--:-->
<!--:lt-->Round lighting<!--:-->

我需要获取<!--:lt--><!--:-->

之间的内容

我试过了:

$string  = "<!--:en-->Apvalus šviestuvas<!--:--><!--:ru-->Круглый Светильник<!--:--><!--:lt-->Round lighting<!--:-->";
preg_match('<!--:lt-->+[a-zA-Z0-9]+<!--:-->$', $string, $match);

var_dump($match);

语法和逻辑有问题。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

preg_match("/<!--:lt-->([a-zA-Z0-9 ]+?)<!--:-->/", $string, $match);
  • 添加了分隔符
  • 添加了一个匹配组
  • 添加了?以使其成为不合理的
  • 添加了[space]Round lighting中有一个空格)

您的结果应该在$match[1]


更酷,更通用的变体是:

preg_match_all("/<!--:([a-z]+)-->([^<]+)<!--:-->/", $string, $match);

这将匹配所有这些。给出:

array(3) { [0]=> array(3) { [0]=> string(37) "Apvalus šviestuvas" [1]=> string(53) "Круглый Светильник" [2]=> string(32) "Round lighting" } [1]=> array(3) { [0]=> string(2) "en" [1]=> string(2) "ru" [2]=> string(2) "lt" } [2]=> array(3) { [0]=> string(19) "Apvalus šviestuvas" [1]=> string(35) "Круглый Светильник" [2]=> string(14) "Round lighting" } }

答案 1 :(得分:0)

使用此模式(?<=<!--:lt-->)(.*)(?=<!--:-->)

<?php
$string  = "<!--:en-->Apvalus šviestuvas<!--:--><!--:ru-->Круглый Светильник<!--:--><!--:lt-->Round lighting<!--:-->";
preg_match('~(?<=<!--:lt-->)(.*)(?=<!--:-->)~', $string, $match);

var_dump($match);