在php中使用preg_replace的字符是什么意思

时间:2017-10-16 09:11:12

标签: php

我知道php中的preg_replace函数 - 执行正则表达式搜索并替换和搜索主题匹配模式并用替换替换它们,例如:

<?php
$string = 'The quick brown fox jumps over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
?>

结果将是:

  

熊黑慢慢地跳过懒狗。

但是我有另一个例子,我不理解搜索和模式中的字符,有人可以告诉我这里发生了什么吗?:

<?php
$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
                   '/^\s*{(\w+)}\s*=/');
$replace = array ('\3/\4/\1\2', '$\1 =');
echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27');
?>

结果将是:

  

$ startDate = 5/27/1999

谢谢

1 个答案:

答案 0 :(得分:2)

我认为你需要参加PHP style PCRE regular expressions的速成课程。但无论如何,这里有一个简短的总结:

  • ()会导致任何内部匹配作为一个组。如果您稍后需要在替换中使用此值,这会非常方便,但也可以有其他用途。
  • (19|20)匹配一个由数字19 och和数字20组成的组
  • (\d{2})匹配由两个{2}个数字\d组成的群组 ()。 \d将匹配0-9范围内的字符。
  • {m,n}将匹配m和n次之间的前一个字符或组。 {m}只会匹配m次,{m,}将匹配至少m次
  • (\d{1,2})匹配一个介于1到2之间的组(即1或2,因为它们之间没有任何内容)数字
  • -匹配减号......

对于另一个表达:

    表达式开头的
  • ^将匹配行的开头(表达式末尾的$将与行的末尾匹配)

  • \s*将匹配任意数字(包括0)的空格字符(\s)。

  • \w+将匹配任意字长(A-Z,a-z,0-9,_)的字符串,但长度至少为1个字符

对于替换,\3将与模式中的第三组()匹配,\4将与第四组匹配,\1将与第一组匹配组和\2将匹配第二组。