------已搬运-------正则中\1的用法---反向引用(加了一点自己的理解进去)

前置知识点:

  1. 原来\b是正则表达式规定的一个特殊代码,也叫元字符,\b代表着单词的开头或结尾,也就是单词的分界处
  2. 最后一个/g是全局匹配bai模式。就是匹配在整du个字符串都有效;比如可zhi以匹配到多次的情况。正常没有g的话,就仅仅匹配到第一个就停止了
  3. /w 是匹配大小写字母 数字 下划线任意一个字符。/W 就是除了/w之外的任意一个字符
  4. /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。。好像作用就是全部换成小写???。就这?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值