2

サンプルコードがあります:

$text = "abc ABC def ghi Abc aBc xyz";
$search = "abc"
$string = str_replace(" ".trim($search)." ", 'DEF', $text);
echo $string;

結果は次のとおりです。" abc ABC def ghi DEF aBc xyz"//Abcの変更のみ

しかし、結果は正確には次のようになります: " abc DEF def ghi DEF DEF xyz"

それを修正する方法は?

4

7 に答える 7

2

次を使用できます。

$regex = '/(\s)'.trim($search).'(\s)/i';
preg_match_all($regex, $text, $tmp3)
于 2012-05-17T04:53:17.953 に答える
1

str_ireplace(大文字と小文字を区別しないstr_replace)の3つのバリアントに対して3回使用できますabc

<?php
$text = "abc ABC def ghi Abc aBc xyz";
$search = "abc";
$string = str_ireplace(' ' . trim($search), ' DEF', $text);
$string = str_ireplace(' ' . trim($search) . ' ', ' DEF ', $text);
$string = str_ireplace(trim($search) . ' ', 'DEF ', $text);
echo $string;

または、正規表現を使用できます。

$text = "abc ABC def ghi Abc aBc xyz";
$search = "abc";
$string = preg_replace("/(\s*)abc(\s*)/i", '$1DEF$2', $text);
echo $string;
于 2012-05-16T09:52:02.147 に答える
0
$string = str_ireplace( $search , 'DEF', $text);

出力:

   DEF DEF def ghi DEF DEF xyz

置き換えられた出力をトリミングする場合:

$string = str_ireplace($search, 'DEF', $text);
$string = str_ireplace(" DEF ", 'DEF', $string);

出力:

DEFDEFdef ghiDEFDEF xyz
于 2012-05-16T09:56:17.890 に答える
0

大文字と小文字を区別しない文字列置換を試す必要があります。str_ireplacePHPで http://codepad.org/atBbj8Kp

 <?php
   $text = "abc ABC def ghi Abc aBc xyz";
    $search = "abc";
    $string = str_replace(" ".trim($search)." ", 'DEF', $text);
    echo $string;
    echo PHP_EOL;
    $string = str_ireplace(" ".trim($search)." ", 'DEF', $text);
    echo $string;
?>
于 2012-05-16T09:50:04.740 に答える
0

期待される結果は実際には次のとおりです。

abc DEF def ghi DEF DEF xyz

最初の「abc」は検索文字列のスペースと一致しません。

于 2012-05-16T09:50:32.800 に答える
0

これがあなたが探しているものだと思いますか?基本的に、大文字と小文字を区別しない検索と置換を使用しstr_ireplaceます。

<?php
$text = 'abc ABC def ghi Abc aBc xyz';
$search = 'abc';
$string = str_ireplace(trim($search), 'DEF', $text);
echo $string;
?>

出力:DEF DEF def ghi DEF DEF xyz

于 2012-05-16T09:51:50.677 に答える
0

大文字と小文字を区別しない検索と置換を実行する場合、str_replaceはタスクに適したツールではありません。

たとえば、これを試してください:

$string = stri_replace(trim($search), 'DEF', $text)

また

$string = preg_replace('@\b' . trim($search) . '\b@i', 'DEF', $text);

質問の余分なスペースが部分的な一致を防ぐためのものである場合-preg_replace最初/最後の文字列が見つからない/置き換えられないことを気にしない限り、バージョンが必要です

于 2012-05-16T09:52:46.693 に答える