mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-18 05:26:57 +08:00
364 lines
19 KiB
HTML
364 lines
19 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
<html>
|
||
<head>
|
||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||
<title>执行匹配正则表达式</title>
|
||
</head>
|
||
<body class="docs"><div id="layout">
|
||
<div id="layout-content"><div id="function.preg-match" class="refentry">
|
||
<div class="refnamediv">
|
||
<h1 class="refname">preg_match</h1>
|
||
<p class="verinfo">(PHP 4, PHP 5, PHP 7)</p><p class="refpurpose"><span class="refname">preg_match</span> — <span class="dc-title">执行匹配正则表达式</span></p>
|
||
|
||
</div>
|
||
|
||
<div class="refsect1 description" id="refsect1-function.preg-match-description">
|
||
<h3 class="title">说明</h3>
|
||
<div class="methodsynopsis dc-description">
|
||
<span class="methodname"><strong>preg_match</strong></span>
|
||
( <span class="methodparam"><span class="type">string</span> <code class="parameter">$pattern</code></span>
|
||
, <span class="methodparam"><span class="type">string</span> <code class="parameter">$subject</code></span>
|
||
[, <span class="methodparam"><span class="type">array</span> <code class="parameter reference">&$matches</code></span>
|
||
[, <span class="methodparam"><span class="type">int</span> <code class="parameter">$flags</code><span class="initializer"> = 0</span></span>
|
||
[, <span class="methodparam"><span class="type">int</span> <code class="parameter">$offset</code><span class="initializer"> = 0</span></span>
|
||
]]] ) : <span class="type">int</span></div>
|
||
|
||
<p class="para rdfs-comment">
|
||
搜索<code class="parameter">subject</code>与<code class="parameter">pattern</code>给定的正则表达式的一个匹配.
|
||
</p>
|
||
</div>
|
||
|
||
|
||
<div class="refsect1 parameters" id="refsect1-function.preg-match-parameters">
|
||
<h3 class="title">参数</h3>
|
||
<p class="para">
|
||
<dl>
|
||
|
||
|
||
<dt>
|
||
<code class="parameter">pattern</code></dt>
|
||
|
||
<dd>
|
||
|
||
<p class="para">
|
||
要搜索的模式,字符串类型。
|
||
</p>
|
||
</dd>
|
||
|
||
|
||
|
||
<dt>
|
||
<code class="parameter">subject</code></dt>
|
||
|
||
<dd>
|
||
|
||
<p class="para">
|
||
输入字符串。
|
||
</p>
|
||
</dd>
|
||
|
||
|
||
|
||
<dt>
|
||
<code class="parameter">matches</code></dt>
|
||
|
||
<dd>
|
||
|
||
<p class="para">
|
||
如果提供了参数<code class="parameter">matches</code>,它将被填充为搜索结果。
|
||
<var class="varname"><var class="varname">$matches[0]</var></var>将包含完整模式匹配到的文本, <var class="varname"><var class="varname">$matches[1]</var></var>
|
||
将包含第一个捕获子组匹配到的文本,以此类推。
|
||
</p>
|
||
</dd>
|
||
|
||
|
||
|
||
<dt>
|
||
<code class="parameter">flags</code></dt>
|
||
|
||
<dd>
|
||
|
||
<p class="para">
|
||
<code class="parameter">flags</code>可以被设置为以下标记值:
|
||
<dl>
|
||
|
||
|
||
<dt>
|
||
<strong><code>PREG_OFFSET_CAPTURE</code></strong></dt>
|
||
|
||
<dd>
|
||
|
||
<p class="para">
|
||
如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。
|
||
注意:这会改变填充到<code class="parameter">matches</code>参数的数组,使其每个元素成为一个由
|
||
第<em>0</em>个元素是匹配到的字符串,第<em>1</em>个元素是该匹配字符串
|
||
在目标字符串<code class="parameter">subject</code>中的偏移量。
|
||
<div class="informalexample">
|
||
<div class="example-contents">
|
||
<div class="phpcode"><pre><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br />preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">'/(foo)(bar)(baz)/'</span><span style="color: #007700">, </span><span style="color: #DD0000">'foobarbaz'</span><span style="color: #007700">, </span><span style="color: #0000BB">$matches</span><span style="color: #007700">, </span><span style="color: #0000BB">PREG_OFFSET_CAPTURE</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</pre></div>
|
||
</div>
|
||
|
||
<p class="para">以上例程会输出:</p>
|
||
<div class="example-contents screen">
|
||
<div class="cdata"><pre>
|
||
Array
|
||
(
|
||
[0] => Array
|
||
(
|
||
[0] => foobarbaz
|
||
[1] => 0
|
||
)
|
||
|
||
[1] => Array
|
||
(
|
||
[0] => foo
|
||
[1] => 0
|
||
)
|
||
|
||
[2] => Array
|
||
(
|
||
[0] => bar
|
||
[1] => 3
|
||
)
|
||
|
||
[3] => Array
|
||
(
|
||
[0] => baz
|
||
[1] => 6
|
||
)
|
||
|
||
)
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</p>
|
||
</dd>
|
||
|
||
|
||
</dl>
|
||
|
||
</p>
|
||
</dd>
|
||
|
||
|
||
|
||
<dt>
|
||
<code class="parameter">offset</code></dt>
|
||
|
||
<dd>
|
||
|
||
<p class="para">
|
||
通常,搜索从目标字符串的开始位置开始。可选参数 <code class="parameter">offset</code> 用于
|
||
指定从目标字符串的某个位置开始搜索(单位是字节)。
|
||
</p>
|
||
<blockquote class="note"><p><strong class="note">Note</strong>:
|
||
<p class="para">
|
||
使用<code class="parameter">offset</code>参数不同于向<span class="function"><strong>preg_match()</strong></span>
|
||
传递按照位置通过<em>substr($subject, $offset)</em>截取目标字符串结果,
|
||
因为<code class="parameter">pattern</code>可以包含断言比如<em class="emphasis">^</em>, <em class="emphasis">$</em>
|
||
或者<em class="emphasis">(?<=x)</em>。 比较:
|
||
<div class="informalexample">
|
||
<div class="example-contents">
|
||
<div class="phpcode"><pre><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br />$subject </span><span style="color: #007700">= </span><span style="color: #DD0000">"abcdef"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$pattern </span><span style="color: #007700">= </span><span style="color: #DD0000">'/^def/'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #0000BB">$pattern</span><span style="color: #007700">, </span><span style="color: #0000BB">$subject</span><span style="color: #007700">, </span><span style="color: #0000BB">$matches</span><span style="color: #007700">, </span><span style="color: #0000BB">PREG_OFFSET_CAPTURE</span><span style="color: #007700">, </span><span style="color: #0000BB">3</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</pre></div>
|
||
</div>
|
||
|
||
<p class="para">以上例程会输出:</p>
|
||
<div class="example-contents screen">
|
||
<div class="cdata"><pre>
|
||
Array
|
||
(
|
||
)
|
||
</pre></div>
|
||
</div>
|
||
<p class="para">
|
||
当这个示例使用截取后传递时
|
||
</p>
|
||
<div class="example-contents">
|
||
<div class="phpcode"><pre><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br />$subject </span><span style="color: #007700">= </span><span style="color: #DD0000">"abcdef"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$pattern </span><span style="color: #007700">= </span><span style="color: #DD0000">'/^def/'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #0000BB">$pattern</span><span style="color: #007700">, </span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$subject</span><span style="color: #007700">,</span><span style="color: #0000BB">3</span><span style="color: #007700">), </span><span style="color: #0000BB">$matches</span><span style="color: #007700">, </span><span style="color: #0000BB">PREG_OFFSET_CAPTURE</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</pre></div>
|
||
</div>
|
||
|
||
<p class="para">
|
||
将会产生匹配
|
||
</p>
|
||
<div class="example-contents screen">
|
||
<div class="cdata"><pre>
|
||
Array
|
||
(
|
||
[0] => Array
|
||
(
|
||
[0] => def
|
||
[1] => 0
|
||
)
|
||
|
||
)
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</p>
|
||
</p></blockquote>
|
||
</dd>
|
||
|
||
|
||
</dl>
|
||
|
||
</p>
|
||
</div>
|
||
|
||
|
||
<div class="refsect1 returnvalues" id="refsect1-function.preg-match-returnvalues">
|
||
<h3 class="title">返回值</h3>
|
||
<p class="para">
|
||
<span class="function"><strong>preg_match()</strong></span>返回 <code class="parameter">pattern</code> 的匹配次数。
|
||
它的值将是0次(不匹配)或1次,因为<span class="function"><strong>preg_match()</strong></span>在第一次匹配后
|
||
将会停止搜索。<span class="function"><a href="preg_match_all.html" class="function">preg_match_all()</a></span>不同于此,它会一直搜索<code class="parameter">subject</code>
|
||
直到到达结尾。
|
||
如果发生错误<span class="function"><strong>preg_match()</strong></span>返回 <strong><code>FALSE</code></strong>。
|
||
</p>
|
||
</div>
|
||
|
||
|
||
<div class="refsect1 changelog" id="refsect1-function.preg-match-changelog">
|
||
<h3 class="title">更新日志</h3>
|
||
<p class="para">
|
||
<table class="doctable informaltable">
|
||
|
||
<thead>
|
||
<tr>
|
||
<th>版本</th>
|
||
<th>说明</th>
|
||
</tr>
|
||
|
||
</thead>
|
||
|
||
<tbody class="tbody">
|
||
<tr>
|
||
<td>5.3.6</td>
|
||
<td>
|
||
如果 <code class="parameter">offset</code> 比 <code class="parameter">subject</code> 的长度还要大则返回 <strong><code>FALSE</code></strong>。
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td>5.2.2</td>
|
||
<td>
|
||
命名子组可以接受<em>(?<name>)</em>, <em>(?'name')</em>
|
||
以及<em>(?P<name>)</em>语法。之前版本仅接受<em>(?P<name>)</em>语法。
|
||
</td>
|
||
</tr>
|
||
|
||
</tbody>
|
||
|
||
</table>
|
||
|
||
</p>
|
||
</div>
|
||
|
||
|
||
<div class="refsect1 examples" id="refsect1-function.preg-match-examples">
|
||
<h3 class="title">范例</h3>
|
||
<p class="para">
|
||
<div class="example" id="example-5862">
|
||
<p><strong>Example #1 查找文本字符串"php"</strong></p>
|
||
<div class="example-contents">
|
||
<div class="phpcode"><pre><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">//模式分隔符后的"i"标记这是一个大小写不敏感的搜索<br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">"/php/i"</span><span style="color: #007700">, </span><span style="color: #DD0000">"PHP is the web scripting language of choice."</span><span style="color: #007700">)) {<br /> echo </span><span style="color: #DD0000">"A match was found."</span><span style="color: #007700">;<br />} else {<br /> echo </span><span style="color: #DD0000">"A match was not found."</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</pre></div>
|
||
</div>
|
||
|
||
</div>
|
||
</p>
|
||
<p class="para">
|
||
<div class="example" id="example-5863">
|
||
<p><strong>Example #2 查找单词"word"</strong></p>
|
||
<div class="example-contents">
|
||
<div class="phpcode"><pre><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">/* 模式中的\b标记一个单词边界,所以只有独立的单词"web"会被匹配,而不会匹配<br /> * 单词的部分内容比如"webbing" 或 "cobweb" */<br /></span><span style="color: #007700">if (</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">"/\bweb\b/i"</span><span style="color: #007700">, </span><span style="color: #DD0000">"PHP is the web scripting language of choice."</span><span style="color: #007700">)) {<br /> echo </span><span style="color: #DD0000">"A match was found."</span><span style="color: #007700">;<br />} else {<br /> echo </span><span style="color: #DD0000">"A match was not found."</span><span style="color: #007700">;<br />}<br /><br />if (</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">"/\bweb\b/i"</span><span style="color: #007700">, </span><span style="color: #DD0000">"PHP is the website scripting language of choice."</span><span style="color: #007700">)) {<br /> echo </span><span style="color: #DD0000">"A match was found."</span><span style="color: #007700">;<br />} else {<br /> echo </span><span style="color: #DD0000">"A match was not found."</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</pre></div>
|
||
</div>
|
||
|
||
</div>
|
||
</p>
|
||
<p class="para">
|
||
<div class="example" id="example-5864">
|
||
<p><strong>Example #3 获取URL中的域名</strong></p>
|
||
<div class="example-contents">
|
||
<div class="phpcode"><pre><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">//从URL中获取主机名称<br /></span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">'@^(?:http://)?([^/]+)@i'</span><span style="color: #007700">,<br /> </span><span style="color: #DD0000">"http://www.php.net/index.html"</span><span style="color: #007700">, </span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$host </span><span style="color: #007700">= </span><span style="color: #0000BB">$matches</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">//获取主机名称的后面两部分<br /></span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">'/[^.]+\.[^.]+$/'</span><span style="color: #007700">, </span><span style="color: #0000BB">$host</span><span style="color: #007700">, </span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"domain name is: </span><span style="color: #007700">{</span><span style="color: #0000BB">$matches</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</pre></div>
|
||
</div>
|
||
|
||
<div class="example-contents"><p>以上例程会输出:</p></div>
|
||
<div class="example-contents screen">
|
||
<div class="cdata"><pre>
|
||
domain name is: php.net
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</p>
|
||
<p class="para">
|
||
<div class="example" id="example-5865">
|
||
<p><strong>Example #4 使用命名子组</strong></p>
|
||
<div class="example-contents">
|
||
<div class="phpcode"><pre><span style="color: #000000">
|
||
<span style="color: #0000BB"><?php<br /><br />$str </span><span style="color: #007700">= </span><span style="color: #DD0000">'foobar: 2008'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">'/(?P<name>\w+): (?P<digit>\d+)/'</span><span style="color: #007700">, </span><span style="color: #0000BB">$str</span><span style="color: #007700">, </span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* 下面例子在php 5.2.2(pcre 7.0)或更新版本下工作, 然而, 为了后向兼容, 上面的方式是推荐写法. */<br />// preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);<br /><br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$matches</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?></span>
|
||
</span>
|
||
</pre></div>
|
||
</div>
|
||
|
||
<div class="example-contents"><p>以上例程会输出:</p></div>
|
||
<div class="example-contents screen">
|
||
<div class="cdata"><pre>
|
||
Array
|
||
(
|
||
[0] => foobar: 2008
|
||
[name] => foobar
|
||
[1] => foobar
|
||
[digit] => 2008
|
||
[2] => 2008
|
||
)
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</p>
|
||
</div>
|
||
|
||
|
||
<div class="refsect1 notes" id="refsect1-function.preg-match-notes">
|
||
<h3 class="title">注释</h3>
|
||
<div class="tip"><strong class="tip">Tip</strong>
|
||
<p class="para">
|
||
如果你仅仅想要检查某个字符串是否包含另外一个字符串,不要使用<span class="function"><strong>preg_match()</strong></span>。
|
||
使用 <span class="function"><a href="strpos.html" class="function">strpos()</a></span> 会更快。
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="refsect1 seealso" id="refsect1-function.preg-match-seealso">
|
||
<h3 class="title">参见</h3>
|
||
<p class="para">
|
||
<ul class="simplelist">
|
||
<li class="member"><a href="pcre.pattern.html" class="link">PCRE 模式</a></li>
|
||
<li class="member"><span class="function"><a href="preg_quote.html" class="function" rel="rdfs-seeAlso">preg_quote()</a> - 转义正则表达式字符</span></li>
|
||
<li class="member"><span class="function"><a href="preg_match_all.html" class="function" rel="rdfs-seeAlso">preg_match_all()</a> - 执行一个全局正则表达式匹配</span></li>
|
||
<li class="member"><span class="function"><a href="preg_replace.html" class="function" rel="rdfs-seeAlso">preg_replace()</a> - 执行一个正则表达式的搜索和替换</span></li>
|
||
<li class="member"><span class="function"><a href="preg_split.html" class="function" rel="rdfs-seeAlso">preg_split()</a> - 通过一个正则表达式分隔字符串</span></li>
|
||
<li class="member"><span class="function"><a href="preg_last_error.html" class="function" rel="rdfs-seeAlso">preg_last_error()</a> - 返回最后一个PCRE正则执行产生的错误代码</span></li>
|
||
</ul>
|
||
</p>
|
||
</div>
|
||
|
||
|
||
</div></div></div></body></html> |