``preg_match()``函数用法及其例子
preg_match()函数是PHP中用于执行正则表达式匹配的函数之一。它可以在一个字符串中查找特定模式所匹配的内容。
其基本语法如下:
preg_match ( $pattern , $subject [, &$matches [, $flags [, $offset ]]] )
其中,各参数的含义如下:
- $pattern:要匹配的正则表达式模式。
- $subject:要被搜索匹配的字符串。
- &$matches:存储匹配结果的数组。如果设置了这个参数,那么将会把匹配的结果存储到 $matches 数组中,并且在函数执行完成后,将会返回一个布尔值,表示是否进行了一次或多次匹配。如果没有设置此参数,那么函数将返回匹配到的数量,这将是数字 0、1 或 FALSE。
- $flags:设置正则表达式的选项,可选值如下:
- PREG_OFFSET_CAPTURE:如果设置了该选项,那么将会记录每个匹配的起始偏移量。
- PREG_UNMATCHED_AS_NULL:将没有匹配到的子模式作为空字符串处理。
- PREG_PATTERN_ORDER:按照正则表达式模式中的顺序返回匹配项。
- PREG_SET_ORDER:按照匹配结果的顺序返回所有的匹配项。
- PREG_OFFSET_CAPTURE:将会对返回的结果进行编号,标记其在字符串中出现的位置。
- $offset:执行匹配操作的起始偏移量。
下面给出一个例子,用 preg_match() 函数从一个字符串中匹配出数字。
$str = "The price of the product is $10.5.";
if (preg_match("/\d+/", $str, $match)) {
echo "The match was found at position: " . $match[0];
}
这段代码会在字符串中寻找任何一个数字,如果找到了,就会输出匹配的数字。当然,如果我们需要寻找到所有的数字,就需要使用 preg_match_all() 函数。
除此之外,还有一些其他的例子可以用来更好地说明 preg_match() 函数的用法。
1. 判断一个字符串是否以数字开头和结尾
$str = "1abc123";
if (preg_match("/^\d.*\d$/", $str)) {
echo "The string starts and ends with a digit";
}
这里的正则表达式会从开头开始查找连续的数字,如果有,那么将会匹配上第一个数字。接下来, .* 会匹配任意数量的字符或空格,直到字符串的结尾。最后一个多余的数字也应该被匹配上。
2. 查找所有的URL链接
$str = "Please visit my website at http://www.example.com to see my latest projects.";
if (preg_match_all("/(http|https):\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/", $str, $matches)) {
echo "The following URLs were found:<br>";
foreach ($matches[0] as $match) {
echo "<a href=\"$match\">" . $match . "</a><br/>";
}
}
代码中的正则表达式是选取URL的,这些URL应该以 http:// 或 https:// 开头,然后是一些字母、数字、空格、短横线、点组成的域名,接下来 http:// 或 https:// 的后面紧接着路径。如果在这个字符串中正则表达式将找到一个URL,那么使用 preg_match_all() 函数来查找到所有这样的URL。
3. 提取一个HTML tag的所有属性
$str = "<a href=\"http://www.example.com\">Visit example.com!</a>";
if (preg_match_all("/<([a-z]+)[^>]*?(\/?)>/i", $str, $matches)) {
foreach ($matches[1] as $match) {
echo "Tag name: " . $match . "<br/>";
}
}
这里的正则表达式会匹配任何变量名后的连续字符串(这个字符串将作为HTML tag的名称),并且紧接着检查后面的任何字符和空格,直到遇见 '>' 字符或者 '/>' 字符串。如果遇到这两种情况,我们就找到了完整的tag。最后的 '/'符号表示tag是否自闭合。
总结一下, preg_match() 函数是一个很有用的函数,可用于从一个字符串中匹配需要的内容。但要注意,正则表达式的用法需要谨慎,否则可能会导致性能的下降,以及其他的安全问题。
