网站开发技术

记点笔记、 学点技术 欢迎交流建站技术。本站关注lamp技术

您尚未登录。

#1 2014-11-04 10:45:38

admin
管理员

php 正则匹配多行的匹配问题, 如何处理

比如一个字符串  "abc\nadc"

如何匹配 abc ?

如何匹配 adc ?

如果同时匹配 abc 和 adc ?


ipbbs.net

离线

#2 2014-11-04 11:00:56

admin
管理员

Re: php 正则匹配多行的匹配问题, 如何处理

示例代码

<?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

离线

页脚

Powered by FluxBB