Найти текст, заключенный в определенные символы, и использовать этот текст в качестве параметра для функции - PullRequest
2 голосов
/ 13 апреля 2011

Я вывожу некоторый HTML из базы данных на страницу, содержащую такие конструкции:

<p>Department: *|accounting|*</p>

Я бы хотел найти и заменить весь текст, завернутый в | и | и использовать слово между ними как переменную для моей функции перевода.

Я нашел частичный ответ . Не могли бы вы, ребята, помочь мне с остальными? Благодаря.

Это то, что я ищу ...

$html_from_database = "<p>Department: *|accounting|*</p>";

$updated_html = preg_replace("*|(.*?)|*", translate('accounting'),$html_from_database);

Возможно ли что-то подобное? Что насчет регулярного выражения? Это не слишком ресурсоемкий или жадный? Обратите внимание, что единственные символы между | и | будет a-z A-Z -_ 0-9.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Попробуйте, я только что проверил, и это работает:

preg_match_all('/\|(.*?)\|/', $source, $matches);
foreach($matches[1] as $match) {
    $source = str_replace($match,translate($match),$source);
}

$source - ваш исходный текст.

1 голос
/ 13 апреля 2011

Я бы сделал это в два шага, нашел бы совпадения, затем вызвал бы функцию translate для каждого и собрал бы полученную строку.Примерно такой псевдокод:

matches = preg_find(".*(\|([a-zA-Z0-9\-_]*)\|).*", sourceHtml)
foreach match in matches
    outputHtml += sourceHtml(section between previous match and this one)
    outputHtml += translate(inner group from match)
    record end position of match
outputHtml += end of sourceHtml
...