2

すべての単語の先頭がすべて大文字になっている文字列があります。ここで、「as、the、of、inなど」の単語リンクを検出できるようにフィルタリングしたいので、小文字に変換されます。私はそれを置き換えて小文字に変換するコードを持っていますが、1つの単語については以下のようになります:

$str = "This Is A Sample String Of Hello World";
$str = preg_replace('/\bOf\b/', 'of', $str);

output: This Is A Sample String of Hello World

だから私が欲しいのは、「is、a」のような文字列などの他の単語をフィルタリングすることです。フィルタリングするすべての単語に対してpreg_replaceを繰り返すのは奇妙です。

ありがとう!

4

3 に答える 3

3

正確な単語と形式がわかっているので、preg_replaceではなくstr_replaceを使用する必要があります。それははるかに高速です。

$text = str_replace(array('Is','Of','A'),array('is','of','a'),$text);
于 2012-06-01T17:02:01.147 に答える
3

preg_replace_callback()を使用します:

$str = "This Is A Sample String Of Hello World";
$str = ucfirst(preg_replace_callback(
       '/\b(Of|Is|A)\b/',
       create_function(
           '$matches',
           'return strtolower($matches[0]);'
       ),
       $str
   ));
echo $str;

「これはHelloWorldのサンプル文字列です」と表示されます。

于 2012-06-01T16:55:03.227 に答える
1

これを試して:

$words = array('Of', 'Is', 'A', 'The');  // Add more words here

echo preg_replace_callback('/\b('.implode('|', $words).')\b/', function($m) {
    return strtolower($m[0]);
}, $str);


// This is a Sample String of Hello World
于 2012-06-01T16:59:05.853 に答える