任务:匹配一个函数名或者变量名,如果碰到alpha,numeric,_以外的全部不允许通过。

实验1:

<?php
//第一个字符不符合就直接退出正则匹配
$str = '%abcscript%d';
var_dump(preg_match('/^(\w*)$/', $str, $matches));
var_dump($matches);
#########output########
#int(0)
#array(0) {
#}
####################### #匹配到
$str1 = 'abcscriptd123_';
var_dump(preg_match('/^(\w*?)$/', $str1, $matches));
var_dump($matches);
#########output########
#int(1)
#array(2) {
# [0]=>
# string(14) "abcscriptd123_"
# [1]=>
# string(14) "abcscriptd123_"
#}
####################### #中间有不匹配模式的
$str2 = 'acd%acd';
var_dump(preg_match('/^(\w*?)/', $str2, $matches));
var_dump($matches);
#########output########
#int(1)
#array(2) {
# [0]=>
# string(0) ""
# [1]=>
# string(0) ""
#}
#####################
//检查一个字符串里面仅包含字母数字或者下划线

第一个的结果显而易见,preg_match返回0,第二个的结果如预期是全串都符合并匹配到,第三个的结果有些出人意料,那为什么preg_match返回1,而$matches未如预期一样包含匹配到的acd呢?

再做一个实验,实验2

<?php
#中间有不匹配模式的
$str2 = 'acd%acd';
var_dump(preg_match('/^(\w*)/', $str2, $matches));
var_dump($matches);
#########output########
#int(1)
#array(2) {
# [0]=>
# string(3) "acd"
# [1]=>
# string(3) "acd"
#}
#####################

实验2的结果:这次可以匹配到符合条件的部分子串 "acd" 了。

对比结果表明:?这个贪婪匹配符起到了很重要的作用,但是对其的工作原理仍然不甚明了。需要继续深入理解。

那么如何完成任务?要检查一个字符串是否只包含alpha, numeric, _

结论是: preg_match('/(\w*)/', $str, $matches);

检查$matches[1] == $str,如果为true则表示该字符串满足条件,为false则表示该字符串不满足条件

<?php
$str = 'acd123_';
var_dump(check_word($str));
$str = 'acd%123_';
var_dump(check_word($str));
$str = '%acd123_';
var_dump(check_word($str)); function check_word($str)
{
preg_match('/^(\w*)/', $str, $matches);
if($matches[1] == $str){
return true;
} else {
return false;
}
}

输出:

bool(true)
bool(false)
bool(false)

任务:把ubb中img标签的内容找出来[img]100.png[/img]

目标:熟悉正则表达式中()的用法

代码:

<?php

$str = '[img]100[/img]test.png[img]1000[/img]';
preg_match_all('/\[img\](.*?)\[\/img\]/', $str, $matches);
var_dump($matches);

  

输出:

array(2) {
[0]=>
array(2) {
[0]=>
string(14) "[img]100[/img]"
[1]=>
string(15) "[img]1000[/img]"
}
[1]=>
array(2) {
[0]=>
string(3) "100"
[1]=>
string(4) "1000"
}
}

任务:把[img]100[/img]提取出来,满足两个要求:能够提取100,并且能够提取出[img]100[/img]这样的模式

目标:熟悉正则表达式中()的用法

代码:

<?php

$str = '[img]100[/img]test.png[img]1000[/img]';
preg_match_all('/(\[img\](.*?)\[\/img\])/', $str, $matches);
var_dump($matches);

输出:

array(3) {
[0]=>
array(2) {
[0]=>
string(14) "[img]100[/img]"
[1]=>
string(15) "[img]1000[/img]"
}
[1]=>
array(2) {
[0]=>
string(14) "[img]100[/img]"
[1]=>
string(15) "[img]1000[/img]"
}
[2]=>
array(2) {
[0]=>
string(3) "100"
[1]=>
string(4) "1000"
}
}

理解:正则表达式的括号()能提取字符串中的那些匹配的串,0号match是整个模式的匹配串,1号match是从左往右的第一个()括号中匹配的内容,2号match是第二个()括号中匹配的内容,以此类推。

关于preg_match_all, 可见另一篇文章:http://www.cnblogs.com/helww/p/3248345.html

keyword: preg_match preg_match_all

php - preg_match的更多相关文章

  1. preg_match()漏洞

    今天大哥丢了一道题过来. <?php $str = intval($_GET['id']); $reg = preg_match('/\d/is', $_GET['id']); //有0-9的数 ...

  2. php preg_match 过滤字符

    $f = preg_match("/g3watches/",$date[0]['desc']); if ($f='1') { $this->error(L('不好意思,输入有 ...

  3. php preg_match($p, $str, $match)方法简介

    方法作用:匹配指定的正则表达式并将结果放在$match数组中 代码示例: $p = '/name:([\\ws]+)/'; $str = "name:steven jobs"; p ...

  4. php 函数preg_match、preg_match_all ,以及正则表达式规则

    <?php $str = 'php is the best language phhhhp is'; $part = '/ph{1,}p/'; echo preg_match($part, $s ...

  5. ***PHP preg_match正则表达式的使用

    第一,让我们看看两个特别的字符:‘^’和‘$’他们是分别用来匹配字符串的开始和结束,以下分别举例说明 : "^The": 匹配以 "The"开头的字符串; &q ...

  6. php中preg_match用户名正则实例

    例子,字母.数字和汉字  代码如下 复制代码 if(preg_match("/[ '.,:;*?~`!@#$%^&+=)(<>{}]|]|[|/|\|"||/& ...

  7. preg_match_all, preg_match

    int preg_match(string $pattern, string $subject[, $arr][, int $flags]);$pattern 正则表达式$subject: 要搜索的字 ...

  8. PHP函数补完:preg_match()

    preg_match — 进行正则表达式匹配. 语法:int preg_match ( string $pattern , string $subject [, array $matches [, i ...

  9. PHP 正则表达式匹配 preg_match 与 preg_match_all 函数

    --http://www.5idev.com/p-php_preg_match.shtml 正则表达式在 PHP 中的应用 在 PHP 应用中,正则表达式主要用于: 正则匹配:根据正则表达式匹配相应的 ...

  10. PHP preg_match正则表达

    在php中preg_match()函数是用来执行正则表达式的一个常用的函数,下面我来给大家详细介绍preg_match使用方法. 函数用法 int preg_match_all ( string pa ...

随机推荐

  1. OGG中断后,重新同步操作

    模拟一下goldengata中断后,重新同步操作: 1.关掉源端抽取进程 GGSCI (20081122-2105) 15> info all Program Status Group Lag ...

  2. python 豆瓣图片的爬取

    豆瓣图片的抓取:在python中实现生产者和消费者模型的实现,大家可以参考这篇文章 http://www.bkjia.com/Pythonjc/978391.html 个人认为是讲的比较易懂的,只要看 ...

  3. Apple 移动设备绑定动态生成元素点击事件$(document).on('click',element,callback)失效解决方法

    今天在工作中刚接触到了微信社区相关的开发工作,测试的时候发现,动态生成元素的点击事件在andriod设备上可以触发,而在apple移动设备上却无法触发.好奇的我赶紧百度了下,很快就在stackover ...

  4. IOS 中会发生crash的操作

    对字典和数组进行下列操作时会产生crash: 对于字典来说: 查询时,key=nil 或者 key=null 时都能正常运行 插入时,,key=nil 或者 key=null 都会crash 对于数组 ...

  5. Java 中值传递和引用传递 区分

    详细参见  http://blog.csdn.net/zzp_403184692/article/details/8184751

  6. MVC3+EF4.1学习系列(八)-----利用Repository and Unit of Work重构项目

    项目最基础的东西已经结束了,但是现在我们的项目还不健全  不利于测试 重复性代码多   层与层之间耦合性高  不利于扩展等问题.今天的这章 主要就是解决这些问题的.再解决这些问题时,自己也产生了很多疑 ...

  7. velocity 高亮显示

    velocity模板在eclipse中高亮显示的链接 http://download.eclipse.org/eclipse/updates/4.4http://veloeclipse.googlec ...

  8. javascript动画效果之多物体缓冲运动

    这个是通过一个for循环控制的三个li标签,被鼠标触发则会有一个宽度增加和减少的事件 html和css同样写在一起方便察看,这里就是简单的布局,重点在js <!DOCTYPE html> ...

  9. NGUI等比缩放

    /// <summary> /// UI 等比缩放 /// </summary> static private void AdaptiveUI() { ; ; UIRoot u ...

  10. COM与.NET程序集导出和部署COM组件

    为了分布式和多客户端调用我们还需要将写好的COM组件发布到一台服务器上.这里我们将组件部署到操作系统的COM+应用程序中去.如果没此需要就可以导出后,在C++环境中调用COM了. 第一步:导出COM组 ...