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

мне нужно получить содержимое между <!--:lt--> и <!--:-->PHP preg_match получить содержимое между

Я попытался:

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

var_dump($match); 

Что-то не так с синтаксисом и логикой. Как я могу сделать эту работу?

+0

Прежде всего, вы должны бежать метасимволы (: -) – hindmost

+1

@hindmost ':' и '' не метасимволы '-' не является метасимволом, если он не находится внутри '[]'. По крайней мере, не в POSIX. – Halcyon

+0

Я имел в виду «зарезервированные» символы. В общем случае '' '' и '!' Следует избегать, чтобы избежать неправильной интерпретации. – hindmost

ответ

2
preg_match("/<!--:lt-->([a-zA-Z0-9 ]+?)<!--:-->/", $string, $match); 
  • добавил разделители
  • добавил матч группы
  • добавляемые ?, чтобы сделать его ungreedy
  • добавил [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" } } 
+2

ленивый квантификатор не нужен, поскольку следующий символ не находится внутри класса символов. –

0

Используйте этот шаблон (?<=<!--:lt-->)(.*)(?=<!--:-->)

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

var_dump($match); 
Смежные вопросы