2013-10-25 3 views
0

Я слабый с регулярным выражением, вам нужна помощь. Моя проблема заключается в том, что я должен извлечь всю строку, которая соответствует заданному шаблону, который у меня есть в массиве. Смотрите проблемы ниже:PHP String Extraction

Строка

<?php 
$alert_types = array(
    'warning' => array('', __l("Warning!")), 
    'error' => array('alert-error', __l("Error!")), 
    'success' => array('alert-success', __l("Success!")), 
    'info' => array('alert-info', __l("For your information.")), 
);?> 

preg_match Код

preg_match("/.*[_][_][l][\(]['\"](.*)['\"][\)].*/", $content, $matches); 

Я только получаю первый один матч, который Внимание!. Я Ожидая матчи будут иметь следующие значения:

Warning!, Error!, Success!, For your information. 

На самом деле я использую file_get_contents ($ файл), чтобы получить строку.

Может ли кто-нибудь помочь мне решить эту проблему. Заранее спасибо.

+0

извините ребята, я использовал preg_match_all вместо preg_match – lukaserat

+0

@mario да вы правы. Я также решил проблему, не глядя на этот возможный дубликат. :) вот мое regex: preg_match_all ("| __l \ (['\"] (. *) [' \ "] \) |", $ content, $ matches, PREG_PATTERN_ORDER); для тех, кто заинтересован. – lukaserat

ответ

2

preg_match() только находит первое совпадение в строке. Используйте preg_match_all(), чтобы получить все совпадения.

preg_match_all("/.*__l\(['\"](.*?)['\"]\).*/", $content, $matches); 

$matches[1] будет содержать массив строк, которые вы ищете.

Кстати, вам не нужны все эти односимвольные скобки. Просто поместите символ в регулярное выражение.

var_dump($matches); 

array(2) { 
    [0]=> 
    array(4) { 
    [0]=> 
    string(45) " 'warning' => array('', __l("Warning!"))," 
    [1]=> 
    string(52) " 'error' => array('alert-error', __l("Error!"))," 
    [2]=> 
    string(58) " 'success' => array('alert-success', __l("Success!"))," 
    [3]=> 
    string(65) " 'info' => array('alert-info', __l("For your information."))," 
    } 
    [1]=> 
    array(4) { 
    [0]=> 
    string(8) "Warning!" 
    [1]=> 
    string(6) "Error!" 
    [2]=> 
    string(8) "Success!" 
    [3]=> 
    string(21) "For your information." 
    } 
} 
+0

Спасибо, Бармар, я сделал это, но снова что-то не так. У меня есть эта строка: 'sprintf (__ l ('У вас есть% d в корзине прямо сейчас. Хотите% sview% s?'), $ TotalPrintCart," "," ")', а на выходе: 'У вас есть% d on тележка прямо сейчас. Хотите% sview% s? '), $ TotalPrintCart, \ " \", \ "<\/a>'. Вы знаете, как получить именно то, что у вас есть% d в корзине прямо сейчас. Хотите% sview% s? ' – lukaserat

+0

Я изменил' (. *) 'На' (. *?) ', Чтобы сделать его неживым. – Barmar

+0

Он работает! :) спасибо человеку! – lukaserat