^在$p = '/^我[^\s]+(苹果|香蕉)$/';里有,为什么在$p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/';里就没有,是断言目标的开始位置的那个,这不是必须的?还是有什么条件?

来源:3-3 元字符与转义

白篱篱

2015-07-18 18:08

除了标题里提到的问题,还有$p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/';

下划线的地方有两个问题:\w匹配字母或数字或下划线,那后面的\.\-呢,\-这里是范围?;还有后面两处加号是代表1 次或多次匹配?

是的话,我还有第三个问题,我自己的答案是$p = '/[\w\.\-]+[0-9\-]/';这个,成功了的,但看别的同学是

$p = '/\d+-[^\s]+\d/';  这里也有两个+,为什么要多次匹配两次,因为有两个\d?那为什么要有两个\d,第一个+后面还有-,这是多匹配加范围?  

新手望多指教,谢谢

写回答 关注

2回答

  • qq_10号_1
    2016-04-13 15:10:31

    非常感谢啊

  • 白篱篱
    2015-07-19 14:45:52

    由于后面的正则我都不太懂2333就去看了精通正则表达式这本书

    来自问自答一下

    ^这个之前我理解错了,我以为是这个表达式开头要用上,其实是 假设你要查找行首的字母单词等等时才需要加上,像是邮箱的那个题目,他最多用上$而不是^

    $p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/   这个里面\.\-,其实\是转义符号,本来. -都是元字符,加上这个,就可以当做普通的字符。

    后面的+号是1次多次匹配,可以当成【1,无穷】,顺便说 *是【0,无穷】,?是【0,1】

    正确答案里的/\d+\-\d+/,电话号码是前面的区号加上后面的数字,所以两块数字被-分隔开了,所以有两个\d,\-也是我上面说的那个作用,顺便一提范围的话,【0-9】,这种是范围。

    本来压根不明白看下书就懂了,的确课程里内容安排少比较难讲清楚,我只看了二十来页最基本的都明白了,也建议大家不懂就下个看一下。over

PHP进阶篇

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

181734 学习 · 2575 问题

查看课程

相似问题