2013-11-17 5 views
0

У меня возникли проблемы с этим, я нашел пару примеров примеров, но я не могу заставить их работать для меня.PHP, как получить строку между двумя символами?

$string = '1. A post-hardcore band from Brazil 2. A rock band from Sweden'; 

Мне нужно получить все, что находится между «1.», и "2."

Есть ли какая-то простая функция расщепления в PHP, которую я мог бы использовать так?

$result = string_between_chars($string, "1. ", "2 ."); 

Или, если я сопоставления для чисел

preg_match('~(1.|2.|3.|4.)~', ($string), $matches 

Есть в любом случае я мог бы изменить это, чтобы остаться с результатом

[0] => 1. A post-hardcore band from Brazil 
[1] => 2. A rock band from Sweden 
+0

Пожалуйста показать код того, что вы уже пробовали – kero

ответ

0

Я думаю, что это может быть раствор:

<?php 
function string_between_chars($string, $from, $to){ 
    preg_match("/$from(.*)$to/",$string,$match); 
    return $match[1]; 
} 

Использовать его l ike:

$result = string_between_chars($string, '1\. ', '2\. '); 

Добавить обратную косую черту перед точками. Точки имеют особое значение в регулярных выражениях. Вы можете избежать этого с помощью обратной косой черты.

+0

Спасибо за ответ. К сожалению, ничего не возвращается с этим. –

+0

Ehh. результат равен $ match [1]. Я изменяю ответ, чтобы быть реальной функцией. –

0

следующее регулярное выражение работы:

/\d+\..*?(?=\d+\.|$)/ 

В PHP:

$str = '1. A post-hardcore band from Brazil 2. A rock band from Sweden' 
     .'3. A rock band from Hawaii 4. A metal band from Germany'; 
preg_match_all('/\d+\..*?(?=\d+\.|$)/',$str,$matches); 
print_r($matches); 

Выход:

Array 
(
    [0] => Array 
     (
      [0] => 1. A post-hardcore band from Brazil 
      [1] => 2. A rock band from Sweden 
      [2] => 3. A rock band from Hawaii 
      [3] => 4. A metal band from Germany 
     ) 
) 

Working Example

0

Привет, вы можете просто использовать это регулярное выражение, пока не цифр в предложениях:

(\d\.\s*[^\d]+) 

Demo

Но если цифры в предложениях, проверьте @ решение OGHaza вместо :)

+1

Соответствие '\ s *' не нужно, что оставляет вам точно мое регулярное выражение. – OGHaza

+0

Да undeed, на всякий случай есть несколько пробелов .. кто знает :) – Enissay

+0

Да, но в матчах он буквально не отличается. '.' соответствует пробелу, поэтому' \ s *. *? =. *? ' И это последнее, что есть в lookahead, а' * 'означает совпадение с пробелами. Таким образом, разница 0 в любых совпадениях. – OGHaza

Смежные вопросы