<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Perl 兼容正则表达式函数</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PHP 手册" HREF="index.html"><LINK REL="UP" TITLE="函数参考" HREF="funcref.html"><LINK REL="PREVIOUS" TITLE="pcntl_wtermsig" HREF="function.pcntl-wtermsig.html"><LINK REL="NEXT" TITLE="模式修正符" HREF="reference.pcre.pattern.modifiers.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="reference" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PHP 手册</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="function.pcntl-wtermsig.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="reference.pcre.pattern.modifiers.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="reference" ><A NAME="ref.pcre" ></A ><DIV CLASS="TITLEPAGE" ><H1 CLASS="title" >CXX. Perl 兼容正则表达式函数</H1 ><DIV CLASS="PARTINTRO" ><A NAME="AEN170565" ></A ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="pcre.intro" >简介</A ></H1 ><P > 本类函数中所使用的模式极其类似 Perl。表达式应被包含在定界符中,如斜线(/)。任何不是字母、数字或反斜线(\)的字符都可以作为定界符。如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。自 PHP 4.0.4 起,也可以使用 Perl 风格的 (),{},[] 和 <> 匹配定界符。详细解释见<A HREF="reference.pcre.pattern.syntax.html" >模式语法</A >。 </P ><P > 结束定界符的后面可以跟上不同的修正符以影响匹配方式。见<A HREF="reference.pcre.pattern.modifiers.html" >模式修正符</A >。 </P ><P > PHP 也支持 POSIX 扩展语法的正则表达式,见 <A HREF="ref.regex.html" >POSIX 扩展正则表达式函数</A >。 </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >注意: </B > 本扩展库保持有一个已编译的正则表达式的全局线程化缓存(最大 4096)。 </P ></BLOCKQUOTE ></DIV ><DIV CLASS="warning" ><P ></P ><TABLE CLASS="warning" BORDER="1" WIDTH="100%" ><TR ><TD ALIGN="CENTER" ><B >警告</B ></TD ></TR ><TR ><TD ALIGN="LEFT" ><P > 要留意到 PCRE 的一些局限。更多信息见 <A HREF="http://www.pcre.org/pcre.txt" TARGET="_top" >http://www.pcre.org/pcre.txt</A >。 </P ></TD ></TR ></TABLE ></DIV ></DIV ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="pcre.requirements" >需求</A ></H1 ><P >要编译本扩展模块无需外部库文件。</P ></DIV ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="pcre.installation" >安装</A ></H1 ><P > 自 PHP 4.2.0 起这些函数默认被激活。可以通过 <CODE CLASS="option" >--without-pcre-regex</CODE > 禁用 PCRE 函数。如果不使用绑定的库的话,用 <CODE CLASS="option" >--with-pcre-regex=DIR</CODE > 来指定 PCRE 库文件和头文件的路径。对早期版本必须在编译时用 <CODE CLASS="option" >--with-pcre-regex[=DIR]</CODE > 才能使用这些函数。 </P ><P > <TT CLASS="literal" >PHP</TT > 的 Windows 版本已经内置该扩展模块的支持。无需加载任何附加扩展库即可使用这些函数。</P ></DIV ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="pcre.configuration" >运行时配置</A ></H1 ><P >本扩展模块在 <TT CLASS="filename" >php.ini</TT > 中未定义任何配置选项。</P ></DIV ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="pcre.resources" >资源类型</A ></H1 ><P >本扩展模块未定义任何资源类型。</P ></DIV ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="pcre.constants" >预定义常量</A ></H1 ><P >以下常量由本扩展模块定义,因此只有在本扩展模块被编译到 PHP 中,或者在运行时被动态加载后才有效。</P ><DIV CLASS="table" ><A NAME="AEN170600" ></A ><P ><B >表 1. PREG 常量</B ></P ><TABLE BORDER="1" CLASS="CALSTABLE" ><COL><COL><THEAD ><TR ><TH >常量</TH ><TH >说明</TH ></TR ></THEAD ><TBODY ><TR ><TD >PREG_PATTERN_ORDER</TD ><TD > 对结果排序使得 $matches[0] 为整个模式的匹配结果的数组,$matches[1] 为第一个括号内的子模式所匹配的字符串的数组,等等。本标记仅用于 <A HREF="function.preg-match-all.html" ><B CLASS="function" >preg_match_all()</B ></A >。 </TD ></TR ><TR ><TD >PREG_SET_ORDER</TD ><TD > 对结果排序使得 $matches[0] 为第一组匹配结果的数组,$matches[1] 为第二组匹配结果的数组,等等。本标记仅用于 <A HREF="function.preg-match-all.html" ><B CLASS="function" >preg_match_all()</B ></A >。 </TD ></TR ><TR ><TD >PREG_OFFSET_CAPTURE</TD ><TD > 见 <TT CLASS="constant" ><B >PREG_SPLIT_OFFSET_CAPTURE</B ></TT > 的说明。本标记自 PHP 4.3.0 起可用。 </TD ></TR ><TR ><TD >PREG_SPLIT_NO_EMPTY</TD ><TD > 本标记使 <A HREF="function.preg-split.html" ><B CLASS="function" >preg_split()</B ></A > 仅返回非空的结果。 </TD ></TR ><TR ><TD >PREG_SPLIT_DELIM_CAPTURE</TD ><TD > 本标记使 <A HREF="function.preg-split.html" ><B CLASS="function" >preg_split()</B ></A > 也捕获定界符模式中的括号表达。本标记自 PHP 4.0.5 起可用。 </TD ></TR ><TR ><TD >PREG_SPLIT_OFFSET_CAPTURE</TD ><TD > 如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其偏移量。本标记自 PHP 4.3.0 起可用且仅用于 <A HREF="function.preg-split.html" ><B CLASS="function" >preg_split()</B ></A >。 </TD ></TR ></TBODY ></TABLE ></DIV ></DIV ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="pcre.examples" >范例</A ></H1 ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN170635" ></A ><P ><B >例 1. 合法的模式举例</B ></P ><P ></P ><UL ><LI ><P ><TT CLASS="literal" >/<\/\w+>/</TT ></P ></LI ><LI ><P ><TT CLASS="literal" >|(\d{3})-\d+|Sm</TT ></P ></LI ><LI ><P ><TT CLASS="literal" >/^(?i)php[34]/</TT ></P ></LI ><LI ><P ><TT CLASS="literal" >{^\s+(\s+)?$}</TT ></P ></LI ></UL ></DIV ></TD ></TR ></TABLE > </P ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN170651" ></A ><P ><B >例 2. 非法的模式举例</B ></P ><P ></P ><UL ><LI ><P > <TT CLASS="literal" >/href='(.*)'</TT > - 缺少结束定界符 </P ></LI ><LI ><P > <TT CLASS="literal" >/\w+\s*\w+/J</TT > - 未知的修正符 'J' </P ></LI ><LI ><P > <TT CLASS="literal" >1-\d3-\d3-\d4|</TT > - 缺少起始定界符 </P ></LI ></UL ></DIV ></TD ></TR ></TABLE > </P ></DIV ></DIV ><DIV CLASS="TOC" ><DL ><DT ><B >目录</B ></DT ><DT ><A HREF="reference.pcre.pattern.modifiers.html" >模式修正符</A > -- 解说正则表达式模式中使用的修正符</DT ><DT ><A HREF="reference.pcre.pattern.syntax.html" >模式语法</A > -- 解说 Perl 兼容正则表达式的语法</DT ><DT ><A HREF="function.preg-grep.html" >preg_grep</A > -- 返回与模式匹配的数组单元 </DT ><DT ><A HREF="function.preg-last-error.html" >preg_last_error</A > -- Returns the error code of the last PCRE regex execution</DT ><DT ><A HREF="function.preg-match-all.html" >preg_match_all</A > -- 进行全局正则表达式匹配</DT ><DT ><A HREF="function.preg-match.html" >preg_match</A > -- 进行正则表达式匹配</DT ><DT ><A HREF="function.preg-quote.html" >preg_quote</A > -- 转义正则表达式字符</DT ><DT ><A HREF="function.preg-replace-callback.html" >preg_replace_callback</A > -- 用回调函数执行正则表达式的搜索和替换</DT ><DT ><A HREF="function.preg-replace.html" >preg_replace</A > -- 执行正则表达式的搜索和替换</DT ><DT ><A HREF="function.preg-split.html" >preg_split</A > -- 用正则表达式分割字符串</DT ></DL ></DIV ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="function.pcntl-wtermsig.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >起始页</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="reference.pcre.pattern.modifiers.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >pcntl_wtermsig</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="funcref.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >模式修正符</TD ></TR ></TABLE ></DIV ></BODY ></HTML >