这个preg_replace发生了什么?

时间:2014-01-18 01:35:57

标签: php

\ w字符类型是怎么回事?目前它输出一个名为$ replace的数组,除了每个名字的第一个字母外,所有名称都有。我真的不明白它到底做了什么。 \ w是任何单词字符,但这对我没有帮助。

<?php

$rappers = array('Drake Themotto', 'Tom Ford', 'Lil Wayne');

$replace = preg_replace('/(\w)\w* (\w)/', '\1 \2', $rappers);

print_r($replace);

?>

1 个答案:

答案 0 :(得分:0)

从左到右,你的正则表达式包含:

  1. 包含一个单词字符的小组
  2. 零个或多个单词字符
  3. 空格
  4. 包含一个单词字符的小组
  5. 对于“Drake Themotto”,这意味着:

    1. 第一组\ 1将是“D”
    2. 以下单词字符“rake”匹配但不会存储
    3. 不会存储空间
    4. 第二组\ 2将是“T”
    5. 对于替换,这意味着您的字符串的匹配部分是“Drake T”。此匹配字符串将替换为“\ 1 \ 2”,在这种情况下为“D T”。

      之后,还有其他一些字符“hemotto”。你没有在你的正则表达式中提到它们,但因为它不包含$来标记字符串的结尾(在这种情况下正则表达式不匹配)或另一个\ w *匹配(=在这种情况下:删除)字符串的其他字符,这个休息只会被忽略。因为你只是“替换”某些东西,“忽略”意味着这里不会替换任何东西,它将被附加到结果中。