问答详情
源自:3-5 使用正则表达式进行匹配

关于正则匹配,preg_match()函数是如何运作的?

我先是写了以下代码,

<?php
$subject = "my email is spark@imooc.com";
//在这里补充代码,实现正则匹配,并输出邮箱地址
$pattern='/\w+@\w+\.(com||cm)/';
preg_match($pattern,$subject,$match);
//echo $match[0];
print_r($match);

结果是:
Array
(
    [0] => spark@imooc.com
    [1] => com
)
有两个,第二个是com
然后我修改了一下正则表达式;代码如下:
<?php
$subject = "my email is spark@imooc.com";
//在这里补充代码,实现正则匹配,并输出邮箱地址
$pattern='/\w+@\w+\.\w+/';
preg_match($pattern,$subject,$match);
//echo $match[0];
print_r($match);

结果是:
Array
(
    [0] => spark@imooc.com
)
就没有[1]了。
为什么呢?
而且,我发现例子里的:
$subject = "abcdef";
$pattern = '/a(.*?)d/';
preg_match($pattern, $subject, $matches);
print_r($matches); //结果为:Array ( [0] => abcd [1] => bc )
例子里输出的bc是abcd的中间两个,而我第一个代码输出的com是邮箱的末尾。这是为什么?


提问者:蜗牛的壳 2016-02-27 17:06

个回答

  • 从此不多说_想戳你就
    2016-02-27 17:45:05
    已采纳

    添加的圆括号相当于给要匹配的内容分组,preg_match()是把整体匹配和分组匹配的内容都输出了

    $subject = "my email is spark@imooc.com";

    $pattern='/(\w+)@(\w+)\.(\w+)/';

    你把正则改成这样输出下,我想你应该就明白了