作者saininniang (sob)
看板PHP
标题Re: [请益] 看不懂preg_replace函数的使用范例
时间Fri Dec 15 21:46:46 2006
※ 引述《foxzgerald (O⊥M)》之铭言:
: ※ 引述《saininniang (sob)》之铭言:
: : 下例传回值为 $startDate = 6/19/1969
: : <?php
: : $patterns = array("/(19|20\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/");
: : $replace = array("\\3/\\4/\\1", "$\\1 =");
: : print preg_replace($patterns, $replace, "{startDate} = 1969-6-19");
: : ?>
: : 这是我在google搜preg_replace函数的使用方法
: : 但我怎麽看$patterns和$replace也没办法推测出像答案一样的结果
: : 我的问题应该是卡在许多符号看不懂其代表的意思
: 上头的范例有些问题,我将改过的地方以黄色显示:
: $patterns = array("/((19|20)\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/");
: $replace = array("\\3/\\4/\\1", "$\\1=");
: print preg_replace($patterns, $replace, "{startDate} = 1969-6-19");
: x x x
有几点疑问
1.
$patterns 的 array[1] "/^\s*{(\w+)}\s*=/"
和
$replace 的 array[1] "$\\1="
似乎没有什麽用处,是多写的吗?
因为好像不须要写也能preg_replace一样的结果?
2.
$patterns =........./^\s*{(\w+)}\s*=/");
$replace =.................... "$\\1=");
最後面的 = 是什麽意思阿?
: / 和 / 所夹的部分代表要比对的 pattern
: ^ 代表从字串开头
: \s 代表 [\r\n\t\f\v] 换行、跳行、空白字串.. (感谢 alpe 补正)
: * 代表 0 or 1 or any
: \w 代表 [a-zA-Z0-9_]
: + 代表 1 or any
: \d 代表 0-9 的数字
: 所以 " {startDate} =" 亦符合 /^\s*{(\w+)}\s*=/
: ((19|20)\d{2}) 代表会搜寻 19 或 20 开头、并且其後接有两位数字的 pattern
: 像是: 1983、2006。
: \d{2}代表数字需重复两次,换个角度来说,可看成要寻找两位数。
: \d{1,2}则是至少出现一次、至多出现两次,如:1、31、99..
: \\3/\\4/\\1 则表示将符合的模式的结果,取代为
: 第三个set/第四个set/第一个set
: \\1 表示符合 ((19|20)\d{2})
: \\2 表示符合 (19|20)
3.
为什麽 \\2是 (19|20) ?
: \\3 表示符合 (\d{1,2})
: \\4 表示符合 (\d{1,2})
: 就本例而言: 1969-6-19 变成 6/19/1969
: by the way ..
: $pattern 与 $replace 为阵列时,是相对应的。
: $pattern[0] 将以 $replace[0] 取代;$pattern[1] 将以 $replace[1] 取代
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.142.122
※ 编辑: saininniang 来自: 220.133.142.122 (12/15 21:47)
1F:推 foxzgerald:因为 (19|20) 是第二个 set 12/15 21:49
※ 编辑: saininniang 来自: 220.133.142.122 (12/15 22:35)
2F:推 saininniang:能帮我将问题1.2的观念澄清一下吗? 12/15 22:35
3F:推 foxzgerald:sorry.. 刚没看到 1和2; 我还纳闷 3. 是哪出来的XD 12/15 22:40