我知道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
谢谢
答案 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
将匹配第二组。