正则表达式 学习+案例
基础参考:菜鸟教程
1.php正则相关函数
preg_filter() 执行一个正则表达式搜索和替换,数组时只返回匹配结果不匹配的直接忽略,字符串时候同preg_replace
案例:
$pattern = array('/\d/', '/[a-z]/', '/[1a]/');
$replace = array('A:$0', 'B:$0', 'C:$0');
$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
print_r(preg_filter($pattern, $replace, $subject))
结果:
Array ( [0] => A:C:1 [1] => B:C:a [2] => A:2 [3] => B:b [4] => A:3 [7] => A:4 )
案例:
$pattern = '/\d/';
$replace = '$0A:';
$subject = 'abc1d2';
print_r(preg_filter($pattern, $replace, $subject));
结果:
abc1A:d2A:
preg_replace() 执行一个正则表达式搜索和替换,将不匹配的结果元素也一起返回
案例:
$pattern = array('/\d/', '/[a-z]/', '/[1a]/');
$replace = array('A:$0', 'B:$0', 'C:$0');
$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
print_r(preg_replace($pattern, $replace, $subject))
结果:
Array ( [0] => A:C:1 [1] => B:C:a [2] => A:2 [3] => B:b [4] => A:3 [5] => A [6] => B [7] => A:4 )
preg_grep用于返回匹配模式的数组条目
案例
$array = array(1, 2, 3.4, 53, 7.9);
// 返回所有包含浮点数的元素
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
print_r($fl_array);
结果
Array ( [2] => 3.4 [4] => 7.9 )
preg_last_error用于返回最后一个PCRE正则执行产生的错误代码
案例
preg_match (' /(?:\ D + | <\ d +>)* [!?] / ' ,' foobar foobar foobar ' );
if (preg_last_error ()== PREG_BACKTRACK_LIMIT_ERROR ){打印'回溯限制已用尽!' ; }
preg_match_all 函数用于执行一个全局正则表达式匹配,返回完整匹配次数(可能是0),或者如果发生错误返回FALSE
案例:查找匹配<b>与</b>标签的内容
$userinfo = "Name: <b>PHP</b> <br> Title: <b>Programming Language</b>";
preg_match_all ("/<b>(.*)<\/b>/U", $userinfo, $pat_array);
print_r($pat_array[0]);
结果
Array ( [0] => <b>PHP</b> [1] => <b>Programming Language</b> )
案例
//\2是一个后向引用的示例. 这会告诉pcre它必须匹配正则表达式中第二个圆括号(这里是([\w]+))
//匹配到的结果. 这里使用两个反斜线是因为这里使用了双引号.
$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);
print_r($matches);
结果
Array ( [0] => Array ( [0] => <b>bold text</b> [1] => <b> [2] => b [3] => bold text [4] => </b> ) [1] => Array ( [0] => <a href=howdy.html>click me</a> [1] => <a href=howdy.html> [2] => a [3] => click me [4] => </a> ) )
preg_match 函数用于执行一个正则表达式匹配
返回 pattern 的匹配次数。 它的值将是 0 次(不匹配)或 1 次,因为 preg_match() 在第一次匹配后 将会停止搜索。preg_match_all() 不同于此,它会一直搜索subject 直到到达结尾。 如果发生错误preg_match()返回 FALSE
案例:查找文本字符串"php"
//模式分隔符后的"i"标记这是一个大小写不敏感的搜索
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
echo "查找到匹配的字符串 php。";
} else {
echo "未发现匹配的字符串 php。";
}
结果
查找到匹配的字符串 php。
案例:获取 URL 中的域名
// 从URL中获取主机名称
preg_match('@^(?:http://)?([^/]+)@i', "http://www.runoob.com/index.html", $matches); $host = $matches[1];
// 获取主机名称的后面两部分
preg_match('/[^.]+\.[^.]+$/', $host, $matches); echo "domain name is: {$matches[0]}\n";
结果
domain name is: runoob.com
preg_split 函数通过一个正则表达式分隔字符串
案例:
//使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
结果
Array ( [0] => hypertext [1] => language [2] => programming )
2.js正则相关函数
<1>search() 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置,search 方法可使用字符串作为参数。字符串参数会转换为正则表达式
案例:使用正则表达式搜索 "Runoob" 字符串,且不区分大小写
var str = "Visit Runoob!";
var n = str.search(/Runoob/i);
结果
6
案例:
var str = "Visit Runoob!";
var n = str.search("Runoob");
结果
n=6
<2>replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串,
案例:使用正则表达式且不区分大小写将字符串中的 Microsoft 替换为 Runoob
var str = document.getElementById("demo").innerHTML;
var txt = str.replace(/microsoft/i,"Runoob");
结果
Visit Runoob!
案例:
replace() 方法将接收字符串作为参数:
var str = document.getElementById("demo").innerHTML;
var txt = str.replace("Microsoft","Runoob");
结果
Visit Runoob!
<3>test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
案例
结果
<4>exec() 方法用于检索字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
2.正则匹配
<1>字符
浙公网安备 33010602011771号