2012-01-27 3 views
1

Я хотел бы спросить о php's preg_match_all. Предположим, мы имеем строку ниже пример:PHP preg_match_all

Это является статья с - значению1 - и -_value_2_- имеющие подпункт - value.3 - элементов.

И я хотел бы, чтобы извлечь все строки с открытием «- » и закрытие « -» символы. Необходимый результат должен быть:

Array 
(
[0] => Array 
    (
      [0] => -_value1_- 
      [1] => -_value_2_- 
      [2] => -_value.3_- 
     ) 
) 
+0

И ... что вы пробовали? Кажется, достаточно просто [regex] (http://www.regular-expressions.info/tutorial.html) – Wrikken

+0

regex i try is "/-_.*._-/", но он возвращает неправильный результат .. не так verse in regex patterns :( –

+1

/(-.*?-)/ или /(-.*-)/U или без (и) – Cheery

ответ

2

Используйте один из следующих простых регулярных выражений /-.*?-/ или /-.*-/U

U (PCRE_UNGREEDY) Этот модификатор инвертирует «алчность» из кванторов так, что они не являются жадными по умолчанию, но становятся жадными , если следовать?. Он несовместим с Perl. Его также можно установить с помощью модификатора (? U) в шаблоне или вопросительным знаком за квантификатором (например, *?).

0

Вы можете использовать этот код:

$str="This is a clause with -value1- and -_value_2_- having a subclause of -value.3- items."; 
if (preg_match_all('/-[^-]*-/', $str, $m)) 
     print_r($m[0]); 
+0

спасибо, он дает те же результаты, которые мне нужны –

0

Иногда preg_match_all() может быть слишком сложным. В этих случаях для этой цели вы можете использовать explode.

$matches = explode("-", $input); 

Что такое explode()?

$input = "This is a basic example: -JOHN-. The End"; 

explode() преобразует $matches в массив. После этого выполняется поиск $input для символа «-». После нахождения «-» он установит массив, как показано ниже.

$input[0] ---> "Это простой пример:"

$input[1] ---> "JOHN"

$input[2] ---> "The End".

explode() является альтернативный путь. Но лучшим является, конечно, preg_match_all()