0

私は巨大な文字列からいくつかの単語を次のpreg_replace() ように使用して置き換えようとしています:

preg_replace($match[0], $variable_value_array, $form_body)

$match[0]次のような形式の値を持つ配列を 次に示します。

$contacts-firstname$
$contacts-lastname$
$contacts-mobile$
$leads-leadstatus$
$leads-noofemployees$

$variable_value_arrayまた、次のような値を持つ配列でもあります。

Linda
William
(091) 115-9385
Value Not Present
Value Not Present

$form_body本当に長いstringです。

関数は の値を置き換えていますが$form_body、全体$contacts-firstname$Lindait で置き換えるのではなく、 のようにするだけで置き換えていcontacts-firstnameます。$ sigh の両方を置き換えるにはどうすればよいですか? ありがとう。Linda$Linda$

4

2 に答える 2

3

これ$は、正規表現の区切り文字として解釈されるためです。str_replace代わりに単純なものを使用する必要があります。署名はまったく同じです。

str_replace($match[0], $variable_value_array, $form_body);

どうしても使用したい場合preg_replaceは、2 つのことを行う必要があります。まず、すべての配列要素を明示的な区切り記号でラップする必要があります (/これは一種の標準的な選択です)。また、 を介してすべての配列要素を実行する必要がありますpreg_quote。そうしないと、$は文字列の終わりのアンカーとして扱われます。

$patterns = array();
foreach($match[0] as $value)
    $patterns[] = '/'.preg_quote($value, '/').'/';

そして、$patternsの代わりに使用し$match[0]ます。しかし、これは、より複雑なパターン内でリテラル検索文字列の配列を実際に使用する必要がある場合に知っておくと便利なだけです。

于 2012-12-11T13:07:48.493 に答える
1

より速く、ユースケースに適したstr_replace代わりに試してくださいpreg_replace

于 2012-12-11T13:07:01.300 に答える