前置知识点:
- 原来\b是正则表达式规定的一个特殊代码,也叫元字符,\b代表着单词的开头或结尾,也就是单词的分界处
- 最后一个/g是全局匹配bai模式。就是匹配在整du个字符串都有效;比如可zhi以匹配到多次的情况。正常没有g的话,就仅仅匹配到第一个就停止了
- /w 是匹配大小写字母 数字 下划线任意一个字符。/W 就是除了/w之外的任意一个字符
- /s 匹配任意一个空白字符\n\t\r 。 /S匹配除了/s和转义字符 之外的 任意一个字符
转载自:正则中\1的用法—反向引用
//好家伙,这竟然是js的代码,我添加了第二个,在php中是对的,,,但是我没有js的环境,就没有编译执行
//但是按照逻辑来讲,应该是正确的,这里的r.match就像是PHP中的preg_match_all()
let r = 'AAABBCCAAAA DDE666FF'
// *表示零个或多个,所以该匹配值可以有零个或者多个
// +表示至少一个或多个,所以该匹配值至少一个或者多个
// 注意\w包含数字,以下都要注意这一点
// 正常匹配单个字符
let match1 = r.match(/(\w)/g)
console.log('match1 :', match1) // match1 : [ 'A','A','A','B','B','C','C','A','A','A','A','D','D','E','6','6','6','F','F' ]
/*这个就是我加的*/
//匹配模式:单子字符+第一个括号中的匹配值(只能够加一个)
let match1 = r.match(/(\w)\1/g)
console.log('match1:',match1)//match1 : ['AA','BB','CC','AA','AA','DD','66','FF']
// 匹配模式:单个字符+第一个括号中的匹配值( * —— 有零个或者多个)
let match2 = r.match(/(\w)\1*/g)
console.log('match2 :', match2) // match2 : [ 'AAA', 'BB', 'CC', 'AAAA', 'DD', 'E', '666', 'FF' ]
// 匹配模式:单个字符+第一个括号中的匹配值( + —— 至少一个或者多个)
let match3 = r.match(/(\w)\1+/g)
console.log('match3 :', match3) // match3 : [ 'AAA', 'BB', 'CC', 'AAAA', 'DD', '666', 'FF' ]
// 匹配模式:单个字符+单个数字 // 注意\w包含数字,以下都要注意这一点 // [ 'E6', '66' ]
let match4 = r.match(/(\w)(\d)/g)
console.log('match4 :', match4) // match4 : [ 'E6', '66' ]
// 匹配模式:单个字符+单个数字+第一个括号中的匹配值( * —— 有零个或者多个) // [ 'E6', '66' ]
let match5 = r.match(/(\w)(\d)\1*/g)
console.log('match5 :', match5) // match5 : [ 'E6', '66' ]
// 匹配模式:单个字符+单个数字+第一个括号中的匹配值( + —— 至少一个或者多个) // [ '666' ]
let match6 = r.match(/(\w)(\d)\1+/g)
console.log('match6 :', match6) // match6 : [ '666' ]
// 匹配模式:单个字符+单个数字+第一个括号中的匹配值( * —— 有零个或者多个)+第二个括号中的匹配值( * —— 有零个或者多个) // [ 'E666' ]
let match7 = r.match(/(\w)(\d)\1*\2*/g)
console.log('match7 :', match7) // match7 : [ 'E666' ]
// 匹配模式:单个字符+单个数字+第一个括号中的匹配值( * —— 有零个或者多个)+第二个括号中的匹配值( + —— 至少一个或者多个) // [ 'E666' ]
let match8 = r.match(/(\w)(\d)\1*\2+/g) console.log('match8 :', match8) // match8 : [ 'E666' ]
记录一下自己复习的:
这个r.match和PHP的preg_match很像,加上g,全局匹配之后,就和preg_match_all()这个一样了
下面是给 这个BUU的题目服务的。。。
对 \1 的理解
\\2代表的是与第二组括号内的内容相同也就是必须以第二组括号里的字母a结尾。其它数字以此类推。
括号的序号以第几个左括号为准。如"(b(\\d)(a))\\1"匹配的是'b3ab3a'
向前引用的意思。
比如前面用括号捕获了一个子匹配,斜杠数字就表示和子匹配一样的内容,第一个子匹配就是\1,第二就是\2
这里测试了一下
<?php
function complex($re, $str) {
return preg_replace(//i 是大小写,e是配合preg_replace使用的
'/(' . $re . ')/ei',//把匹配来的字符串当作正则表达式执行
'strtolower("\\1")',
$str
);
}
$a="aB";
$b="Ab4AB4";
$c = complex($a,$b);
echo $c;
//output:ab4ab4。。好像作用就是全部换成小写???。就这?