-
元字符与转义 正则表达式中具有特殊含义的字符称之为元字符,常用的元字符有: \ 一般用于转义字符 ^ 断言目标的开始位置(或在多行模式下是行首) $ 断言目标的结束位置(或在多行模式下是行尾) . 匹配除换行符外的任何字符(默认) [ 开始字符类定义 ] 结束字符类定义 | 开始一个可选分支 ( 子组的开始标记 ) 子组的结束标记 ? 作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性。 (查阅量词) * 量词,0 次或多次匹配 + 量词,1 次或多次匹配 { 自定义量词开始标记 } 自定义量词结束标记 //下面的\s匹配任意的空白符,包括空格,制表符,换行符。[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符。 $p = '/^我[^\s]+(苹果|香蕉)$/'; $str = "我喜欢吃苹果"; if (preg_match($p, $str)) { echo '匹配成功'; } 元字符具有两种使用场景,一种是可以在任何地方都能使用,另一种是只能在方括号内使用,在方括号内使用的有: \ 转义字符 ^ 仅在作为第一个字符(方括号内)时,表明字符类取反 - 标记字符范围 其中^在反括号外面,表示断言目标的开始位置,但在方括号内部则代表字符类取反,方括号内的减号-可以标记字符范围,例如0-9表示0到9之间的所有数字。 //下面的\w匹配字母或数字或下划线。 $p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/'; $str = "我的邮箱是Spark.eric@imooc.com"; preg_match($p, $str, $match); echo $match[0]; 任务 请编写一个模式,用户匹配目标字符串中的电话号码。(提示:\d匹配数字) ?不会了怎么办 将变量$p的表达式修改为: $p = '/\d+\-\d+/';查看全部
-
//这里是为了说明本节中关于懒惰模式的例子是错误的 $p = '/\d?\-\d?/'; $str = "我的电话是910-92345678"; //我把电话号码里的第一个0改为了9,这样更能看清匹配出的是哪个数字 preg_match($p, $str, $match); echo $match[0]; //结果为:0-9 /*匹配过程:- 把字符串分为910和92345678两部分,910从最后一个0开始,0匹配\d?(出现1次数字),而且后面紧跟 - ,符合,结束(或者理解为先从9开始,后面-不匹配,接着1,同样不匹配,到0匹配,这里匹配包括了后面的-,后面92345678同样道理);92345678 也从最后一个8开始, 虽然匹配\d?, 但是前面不是-, 回退 一个数字到7, 同样不符合,直到9才符合,结束。注意:\d?每次只吞掉一个字符,因为?代表0或者1次,而*和+号要吞掉整个字符串。所以这里关于懒惰模式的例子是错误的。结果里的0-1,0根本就不是第一个0,而是第三个,这根本就不叫懒惰模式,如果是懒惰模式,应该匹配出的是第一个0 。*/查看全部
-
good查看全部
-
使用关键字static修饰的,称之为静态方法,静态方法不需要实例化对象,可以通过类名直接调用,操作符为双冒号::。 class Car { public static function getName() { return '汽车'; } } echo Car::getName(); //结果为“汽车”查看全部
-
这里的重载不是c++或者java意义上的重载,而是php的一个默认函数__call($name,$args),当你要调用的函数不存在时,函数名(speedDown)传给形参$name,里面的参数传给形参$args,然而内部具体执行需要自己编写。查看全部
-
第一种:$array['key']此单引号键值模式可以直接被解析为一个数组即$array 第二种:$array["key"]此双引号键值模式,先执行的是"key",判断是否有定义的PHP变量存在,在解析为数组即$array 第三种:$array[key]此为无单双引号键值模式,会先分析局部作用于是否有key键值定义的常量存在,即使用define('key','val'),然后解析数组即$array查看全部
-
PHP有两种数组:索引数组、关联数组。 索引和关联两个词都是针对数组的键而言的。 先介绍下索引数组,索引数组是指数组的键是整数的数组,并且键的整数顺序是从0开始,依次类推。 索引数组赋值有三种方式: 第一种:用数组变量的名字后面跟一个中括号的方式赋值,当然,索引数组中,中括号内的键一定是整数。比如,$arr[0]='苹果'; 第二种:用array()创建一个空数组,使用=>符号来分隔键和值,左侧表示键,右侧表示值。当然,索引数组中,键一定是整数。比如,array('0'=>'苹果'); 第三种:用array()创建一个空数组,直接在数组里用英文的单引号'或者英文的双引号"赋值,数组会默认建立从0开始的整数的键。比如array('苹果'); 关联数组是指数组的键是字符串的数组。 关联数组赋值有两种方式: 第一种:用数组变量的名字后面跟一个中括号的方式赋值,当然,关联数组中,中括号内的键一定是字符串。比如,$arr['apple']='苹果'; 第二种:用array()创建一个空数组,使用=>符号来分隔键和值,左侧表示键,右侧表示值。当然,关联数组中,键一定是字符串。比如,array('apple'=>'苹果');查看全部
-
php 中的 heredoc技术是php用来引用字符串的一种方式。在phpwind中巧妙的运用了这个技术,实现了逻辑代码和界面设计的分离。 语法: 1. 使用操作符 “<<<” 2. 操作符后紧跟标识符(开始标识符),之后重起新的一行 输入要引用的字符串,可以包含变量。 3. 新的一行,顶格写结束表示符,以分号结束。 要注意到几点: 1.标识符可以自定义 一般的 有EOT ,EOD EOF 等, 只有保持开始表示符和结束表示符一样即可。 2.结束表示符必须独占一行,且必须顶格写,最后以 ‘;’ 分号结尾。 3.所有引用的字符串中可以包含变量,无需字符串连接符。 <?php $str = <<<ET heredoc test!!! ET; echo $str; ?> 输出结果 heredoc test!!!查看全部
-
$car = new car()实例化对象要注意有个new。 在定义一个类时,因为没有对类实例化(对象),因而也无法得知对象的具体名称是什么。这时,如果想调用类中的成员方法或成员变量,就只能通过伪变量$this调用,$this顾名思义就是指类本身,需要注意的一点是$this 只能在类内部使用,否则将出错。 嘛,其实要是学过了C#或者其他的机器语言的话对类和对象的理解还是挺容易的,虽然这些机器语言在运用方面差异很大,但是在基本概念方面赶脚都是大同小异的。查看全部
-
看到正则表达式感觉已经爆炸了查看全部
-
文件是否存在: file_exists($fname); 是不是文件:is_file($fname); 是否可读、写: file_readable($filename); file_writeable($filename); 读取所有文件内容: file_get_contents($fname); 打开文件: fopen($fname); 关闭文件: fclose($fname); 下一行是否有内容:feof($opendfile); 读取一行内容: fgets($openfile);查看全部
-
文档上的解释为:如果提供了参数 matches ,它将被填充为搜索结果。 $matches[0] 将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推。 文档上对于子组的说明为:子组通过圆括号分隔界定,并且它们可以嵌套。 如果正则表达式写为$p = '/\w+\s\w+/';,则没有子组,$matches[1]为空,而$matches[0]包含所匹配的文本;但是将表达式加上括号写为$p = '/(\w+\s\w+)/';,则有了子组,此时$matches[1]与$matches[0]相同。查看全部
-
访问控制 访问控制通过关键字public,protected和private来实现。 被定义为公有的类成员 可以在任何地方被访问。 被定义为受保护的类成员 则可以被其自身以及其子类和父类访问。 被定义为私有的类成员 则只能被其定义所在的类访问。 类属性必须定义为公有、受保护、私有之一。 注:为兼容PHP5以前的版本,如果采用 var 定义,则被视为公有。 class Car { $speed = 10; //错误 属性必须定义访问控制 public $name; //定义共有属性 } 类中的方法可以被定义为公有、私有或受保护。 注:如果没有设置这些关键字,则该方法默认为公有。 如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。 class Car { private function __construct() { echo 'object create'; } private static $_object = null; public static function getInstance() { if (empty(self::$_object)) { self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象 } return self::$_object; } } //$car = new Car(); //这里不允许直接实例化对象 $car = Car::getInstance(); //通过静态方法来获得一个实例查看全部
-
可以运行的,只是error.log文件是只读文件,不能写入$msg。 代码运行结果如下: Error:wrong #0 {main} 异常行号:3 所在文件:/26/603/CbaO/index.php Warning: file_put_contents(error.log): failed to open stream: Read-only file system in /26/603/CbaO/index.php on line 11查看全部
-
我想知道这个 $args 代码是从哪里冒出来的 有什么意思吗? public function __call($name, $args) { if ($name == 'speedDown') { $this->speed -= 10; } } 2015-05-19 源自:PHP进阶篇 3-9 417 浏览 1 回答 最佳回答 2015-05-19 1,当我们试图调用类中一个不可见或者未定义方法的时候,类中定义好的__call这个魔术方法就会去监听这个动作。 并且会自动将我们试图调用的方法名放入到__call方法的第一个参数中,将方法里面的实际参数放到__call方法的第二个参数中(如果没有传递任何参数,那么第二个参数就是一个空数组)。 2,__call里面的参数是形式参数,参数名可以自定义。查看全部
举报
0/150
提交
取消