页次: 1
比如一个字符串 "abc\nadc"
如何匹配 abc ?
如何匹配 adc ?
如果同时匹配 abc 和 adc ?
ipbbs.net
离线
示例代码
<?php $subject = "abc\nadc"; $pattern1 = "/^a.c/"; $pattern2 = "/a.c$/"; $pattern3 = "/^a.c$/m"; preg_match_all($pattern1, $subject, $matches1); preg_match_all($pattern2, $subject, $matches2); preg_match_all($pattern3, $subject, $matches3); var_dump($matches1); var_dump($matches2); var_dump($matches3);
打印结果
array 0 => array 0 => string 'abc' (length=3) array 0 => array 0 => string 'adc' (length=3) array 0 => array 0 => string 'abc' (length=3) 1 => string 'adc' (length=3)
这里主要是php对正则表达式是如何处理的。
正常的情况是, php 把被匹配的字符串,按照一行的方式来处理。
这里字符串 $subject 特别的地方是 有一个 \n 这样就是两行字符串。
所有有出现了一些问题。
第一个正则表达式是 /^a.c/ 表示 a开始头, 刚好是一行。所以匹配了abc
第二个正则表达式是 /a.c$/ 表示 c结尾,刚好是 abc
第三个重点是使用m修饰符。
这个 m 的意思在 正则表达式中,^, $ 可以表示任意的行首和行尾。 这里的行首就是 /n 之后就是行首, /n 之前的就是行尾。
这样就可以匹配多个了。
如果没有 m 那就表示要匹配的字符串,只有一个行首 和一个 行尾。
这里如何匹配整个字符串呢?
使用表达式
$pattern = "/^a[\w\n]+c$/";
就可以了。
ipbbs.net
离线
页次: 1