初学PHP正则表达式

1. 想要匹配开头5个字符为字母数字的字符串 check that the first five characters in the string are alpha numeric characters.

preg_match('/^[A-Za-z0-9]{5}/', $test_string);   
preg_match('/^\w{5}/', $test_string);

\w specifies any alpha numeric characters plus the underscore character (_).

$test_string = "3w5_32fgdsg*$@#";
preg_match('/^\w{5}/', $test_string, $matches);
var_dump($matches);

output:

array(1) {
[0]=>
string(5) "3w5_3"
}

2. 工作中遇到需要解析HTTP Header信息,取出sid信息,代码如下

$s = "HTTP/1.1 100 Continue HTTP/1.1 302 FOUND Server: nginx/1.1.12 Date: Wed, 17 Oct 2012 11:40:40 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Cookie Location: http://192.168.100.99:8360/login.php?sid=d7852c9c63a3ef9f6c48cda1a0503e7f Set-Cookie: sessionid=d7852c9c63a3ef9f6c48cda1a0503e7f; expires=Wed, 17-Oct-2012 13:40:40 GMT; Max-Age=7200; Path=/ ";

观察头信息可知,sid=一串字母和数字的组合后面为一空格,可变写正则表达式 '/sid=[0-9a-zA-Z]+/ '   +表示匹配一到多次的字母和数字的组合,为了能取出sid的值需要 '/sid=([0-9a-zA-Z]+)/ '  用()括起来,最后能从$regs数组中取到
preg_match( '/sid=([0-9a-zA-Z]+)/ ', $s, $regs);
var_dump($regs);

输出如下:

array(2) {
[0]=>
string(36) "sid=d7852c9c63a3ef9f6c48cda1a0503e7f"
[1]=>
string(32) "d7852c9c63a3ef9f6c48cda1a0503e7f"
}

3. php匹配并取小括号中的字符串

$pattern = '/.*\((.*)\).*/';
$subject = 'sdfs(sss)';
print preg_match($pattern, $subject, $matches);
print_r($matches); 

 1Array
(
[0] => sdfs(sss)
[1] => sss

4. 用grep取出包含7到8位电话号码的行(首号码不为0)

grep "[1-9][0-9]\{6,7\}" data.txt

具体php-regular-expressions的语法参考http://www.noupe.com/php/php-regular-expressions.html

 

5.

<?php
$domain_list = array(
    'tmall.com',
    'alibaba.com',
    'taobao.com',
    'jd.com',
);
$host = 'tmall.com';
preg_match("/(".implode("|", $domain_list).")$/iU", $host, $matches);
var_dump($matches);

i表示不区分大小写, U表示不要贪婪

array(2) {
[0]=>
string(9) "tmall.com"
[1]=>
string(9) "tmall.com"
}

 

 

posted on 2012-11-07 10:06  胡博的博客  阅读(177)  评论(0编辑  收藏  举报

导航