Preg матч вопрос - PullRequest
       4

Preg матч вопрос

2 голосов
/ 31 октября 2010

Я уверен, что кто-то уже задавал этот вопрос, но после поиска более 1 часа в Google, я решил задать свой вопрос здесь.

Я хочу перебрать массив, исключая различные строки /тексты.Эти тексты содержат строки с ## valuetoreplace ## и # valuetoreplace #

, которые я хочу сделать с preg_matches:

$pattern = '/^#{1}+(\w+)+#{1}$/';
if(preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE))
{
   // do something with the #values#
}

AND

$pattern = '/^#{2}+(\w+)+#{2}$/';
if(preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE))
{
   //do something with the ##value##
}

Это прекрасно работает,Теперь моя единственная проблема заключается в следующем:

Когда у меня есть строка типа

$valueToMatch = 'proceding text #value#';

Мой preg_match больше не может найти мое значение (так как я использовал ^ и $).

Вопрос: как я могу найти #value# и ##value##, не беспокоясь, если эти слова находятся в середине (многострочного) значения?

* Кроме того: Чтоя хочу, чтобы найти шаблоны и заменить # значение # со значением в дБ и ##value## со значением массива.Например:

$thingsToReplace = 'Hello #firstname# #lastname#, 
How nice you joined ##namewebsite##.';

должно быть

'Hello John Doe, 
How nice you joined example.com.'

Ответы [ 2 ]

1 голос
/ 31 октября 2010

Попробуйте: /##([^#]+)##/ и /#([^#]+)#/, в этом порядке.

0 голосов
/ 31 октября 2010

Может быть, приятно узнать для других посетителей, как я это сделал:

foreach($personalizeThis as $key => $value) 
{
   //Replace ##values##
   $patternIniData = '/#{2}+(\w+)#{2}/';
   $return = 'website'; //testdata
   $replacedIniData[$key] = preg_replace($patternIniData, $return, $value);

   //Replace #values#
   $pattern = '/#{1}+(\w+)#{1}/';  
   $return = 'ASD'; //testdata
   $replacedDbData[$key] = preg_replace($pattern, $return, $replacedIniData[$key]);
}

return $ replaceDbData;

...