当前位置:主页 > 新闻 > 春蕾手记 >
PHP正规表达式比对

 
有时候我们会需要过滤一些字符串、或是验证数据的情况,就可以使用 php 的正则表达式来帮助检查,进而达到想要取得或是想要滤掉的文字部分,以下简单介绍 Perl 函式以及正则需要用到的规则。郑州网站建设

 

1.preg_mtach()

用来做表达式的匹配,格式为:
" preg_match( $pattern, $subject, $matches , $flags, $offset) "
$pattern 放要比对的格式或标准,$subject 为要比对的字符串,$matches 为可选,会把匹配结果存入数组中,$matches[1] 是匹配第一个括号的文字、$mtaches[2] 则为匹配第二个括号内的文字,以此类推,$flags 可以选择常数 PREG_OFFSET_CAPTURE ,设定后会导致搜索字符串偏移, $offset 将会从设定的偏移量开始搜索,另外preg_match最后会回传true、false当作比对结果,用来检测是否满足条件。郑州网站建设
<?php 
$pattern = "/(^886\-)\d{2,3}\-\d{7,8}$/";

$string = "886-09-12345678";

preg_match($pattern, $string, $matches);

echo $matches[0]; // 886-09-123345678

echo $matches[1]; // 886-
?>
可以发现 $matches[1]就是第一个括号内所要比对的字符串。

 

2.preg_match_all()

“ preg_match_all( $pattern, $subject, $matches , $flags, $offset ) “
与 preg_match 是相同用法,用来匹配正则表达式,语法格式也相同,区别在于 preg_mtach 一旦搜索到结果,会停止继续往下而回传结果,但是 preg_mtach_all 会一直搜寻到$subject的结尾,找到第一个匹配的文字后,下次会从第一个匹配结果往下继续搜索。郑州网站建设
<?php
$pattern = "/\w+/";

$string = "Hello this is test";

preg_match($pattern, $string, $matches);

foreach ($matches[0] as $word) {
   echo $word . PHP_EOL;

}
?>
// result
/* 

   Hello

   this

   is

   test

*/
如果使用同样的方式使用 preg_match 的结果就会是只有 "Hello",因为一旦找到符合的字符串,就会立即回传。

3.preg_replace()

用来做正则运算的搜索以及取代,格式为:
“preg_replace( $pattern, $replacement, $subject, $limit)”
$pattern 为所要匹配的规则与前面相同,$replacement 是搜索相关字词后所要取代成为的文字,$subject 则为要进行比对的文字内容, 设定 $limit 参数代表只取代 $limit 个匹配(ex: $limit = 2的话,只取代前两个匹配的文字)郑州网站建设
<?php
$pattern = "/\s/";

$string = "Hello this is test";

$result = preg_replace($pattern, "-", $string);

echo $result; // Hello-this-is-test

$result1 = preg_replace($pattern, "-", $string, 1);

echo $result1; // Hello-this is test
?>
如果 $limit 参数设定 -1,则代表所以有的匹配都会被取代,郑州网站建设其实就跟没设定一样意思。

4.preg_split()

该函数用来分割字符串,格式为:
“preg_split( $pattern, $subject, $limit, $)”
将 $subject 依照规则切开后,组成一个数组回传,设定 $limit 参数,只会回传 $limit 个结果(ex: $limit = 2 回传前两个匹配结果),如果是-1或者未设定,就是代表回传所以匹配结果。
<?php
$pattern = "/-/";

$string = "Hello-this-is-test";

$result = preg_split($pattern, $string);

print_r($result);
?>
// result

/*
Array

(

   [0] => Hello

   [1] => this

   [2] => is

   [3] => test
)

*/
有其它更容易且简单的函数可以使用,例如 explode() str_split()等等...

5.preg_grep()

用来做正则运算的匹配与回传数组,格式为:
"preg_grep ($pattern , $input_array, $flags)"
$pattern是要比对的正则规则,$input_array 是所要比对的数组或是输入的数组,$flags是可选择参数( PREG_GREP_INVERT)
<?php
$pattern = "/e/";

$array = array("Hello", "this", "is", "test");

$result = preg_grep($pattern, $string);

print_r($result);
?>
// result

/*

Array

(

   [0] => Hello

   [3] => test
)

*/
使用常数 PREG_GREP_INVERT 的结果为与 $pattern 不相匹配的文字,就是与上面例子刚好相反,回传结果为
Array

(

  [1] => this

  [2] => is

)

 

Top