2

我有一个字符串,其中每个单词的所有开头都大写。现在我想过滤它,如果它可以检测到单词链接“as, the, of, in, etc”,它将被转换为小写。我有一个替换并将其转换为小写的代码,但仅适用于 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

由于您知道确切的单词和格式,因此您应该使用str_replace而不是 preg_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;

显示“这是 Hello World 的示例字符串”。

于 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 回答