Исправление регулярных выражений для функции preg_replace_callback - PullRequest
0 голосов
/ 13 сентября 2011

STRING:

$string = '{$string#anything#something this string will output default |ucfirst|strtoupper}';

PREG_REPLACE_CALLBACK КОД (PHP):

$string = preg_replace_callback('/\{\$?([^# ]+)\#?([^ ]+)? ?([^|]+)?[ \|]?([^\}]+)?\}/', $matches, $string);

ВЫХОД ($ совпадений):

Array
(
    [0] => {$string#anything#something can you hear me? |ucfirst|ucfirst|ucfirst|strtoupper}
    [1] => string
    [2] => anything#something
    [3] => can you hear me? 
    [4] => ucfirst|strtoupper
)

ТРЕБОВАНИЕ: вместо {$string this string will output default |ucfirst|strtoupper}, я хочу использовать {$string this string will output default ucfirst|strtoupper} (обратите внимание: знак канала перед ucfirst удален);

ВАЖНО: вывод (т. Е. Массив совпадений $) должен выглядеть так же, как напечатано выше.

Ваша помощь будет высоко оценена, спасибо за чтение.

1 Ответ

1 голос
/ 02 октября 2011

Я попробовал ваш код с изменением вашей функции ...

Код

<code> <pre>
 <?php
      $string = '{$string#anything#something this string will output default |ucfirst|strtoupper}'; http://www.magentocommerce.com/support/magento_core_api 
      preg_match('/\{\$?([^# ]+)\#?([^ ]+)? ?([^|]+)?[ \|]?([^\}]+)?\}/', $string, $matches);
      var_dump($matches);
  ?>
  

Результат получен

array(5) {
    [0]=>string(80) "{$string#anything#something this string will output default |ucfirst|strtoupper}"
    [1]=>string(6) "string"
    [2]=>string(18) "anything#something"
    [3]=>string(32) "this string will output default "
   http://php.net/manual/en/function.preg-replace-callback.php [4]=>string(18) "ucfirst|strtoupper"
}

Это соответствует вашим ожиданиям? Должны ли мы заменить "эта строка выведет" по умолчанию на "Вы меня слышите?" Вы хотите удалить в канал до ucfirst. Вы хотите сделать это в строке и, соответственно, обновить reg exp, если это так, каково правило для определения строки '' ucfirst '' (последней строки перед первым каналом? )

Что вы пытаетесь сделать с preg_replace_callback, эта функция будет вызывать функцию (ваш параметр $ совпадений) для каждого найденного мотива ... Это ваша идея?

Связанная документация: http://php.net/manual/en/function.preg-replace-callback.php

...