我看到这样一个例子: $_response_body = preg_replace('#(<\s*title[^>]*>)(.*?)(<\s*/title[^>]*>)#is', '$1$3', $_response_body);迷惑不解的是#字符,#is 在这里的作用是什么,下文还有#si,有没有人告知,感谢!

解决方案 »

  1.   

    两头的 # 是定界符,你可以使用 / @ 等代替。#is 里的#是定界的结果,后面的 is 是这个正则的一些参数等
      

  2.   

    这个你需要 google 或者查阅更加多的资料
      

  3.   

    s的解释不对吧!应该是/s的模式中的圆点元字符(.)匹配所有的字符,包括换行符。如果没有s参数,.不能匹配/n
      

  4.   

    #为定界符
    i与s正则字符,i表示不分大小写
    S表示不换行
      

  5.   

    在网上找了一下,没有找到S的解释,
    S表示不换行,这个不太明白
    s 将字符串视为单行。回车符作为普通字符。这个能理解
      

  6.   

    举例:
    $_response_body = preg_match_all('#(<(.*?)#is', $_response_body,$matches);如果:$_response_body = "123456\n789";
    加s 匹配结果是  123456\n789
    不加s 匹配结果是 123456但对于S是怎么回事呢?
      

  7.   

    “#”号是在你此正则表达式中的“定界符”,表示这中间是你的正则表达示,而不是普通字符正则定符不是只有"/",而是任何不是字母、数字或反斜线(\)的字符都可以作为定界符。如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。自php4.0.4起,也可以使用Perl风格的 (),{},[] 和 <> 匹配定界符。如下面的写法都是合法的:$str ='abc123def5g';
    preg_match_all('/\d+/i', $str, $arr1);
    preg_match_all('|\d+|i', $str, $arr2);
    preg_match_all('(\d+)i', $str, $arr3);
    preg_match_all('{\d+}i', $str, $arr4);
    preg_match_all('[\d+]i', $str, $arr5);
    preg_match_all('<\d+>i', $str, $arr6);
    ------------------后面的“i”和“s”是“正则模式匹配符”。
    i:PCRE_CASELESS 如果设定此修正符,模式中的字符将同时匹配大小写字母。
    s:PCRE_DOTALL 如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的,无论是否设定了此修正符。如果还想了解其它关于“模式匹配符”的知识的话,可以看下我的博客
    http://hi.baidu.com/tianliao1988/blog/item/ddc2ba1839909e6edbb4bd56.html
    可能对你有用。。