🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
##### **递归表达式 (?R)**针对表达式  反向引用针对匹配内容 | 格式 | 说明| | --- | --- | | **(?R)** | 对整个表达式的递归引用。 | | **(?R1)**,**(?R2)** | 对指定分组的递归引用。| | **(?1)**,**(?2)**|对指定命名分组的递归引用 | **(?R)** | 对指定命名分组的递归引用。 | | **(?R'named')** |对指定命名分组的递归引用 ``` $subject='e+f (-(g/(h-i))*j'; $pattern="/\(([^()]|(?R))*\)/i"; preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); dump($matches); ``` ![](https://img.kancloud.cn/bd/48/bd4883a84c163063e719a6a51c0f5fd2_285x202.png) ~~~ (\w)(?1) 等效于 (\w)(\w) // (?1)代表引用第一个分组即\w (?2)代表引用第二个分组即\d (?1)(\w(?2))(\d)=>(?1)(\w(\d))(\d)=>(\w(\d))(\w(\d))(\d) //被引用的表达式又包含自身,则形成了递归引用 (\w(?1)?)=>(\w(\w(?1)?)?)=>(\w(\w(\w(?1)?)?)?)=>...=>(\w+) ~~~ php中正则表达式替换语法 ~~~ $1 ~ $999 代表某个捕获组捕获到的内容。如果捕获组编号大于表达式中的最大捕获组编号,那么 DEELX 会减少数字个数,以使捕获组编号小于或等于最大编号;而把剩余的数字看作字符串常量。 举例: 当前最大捕获组编号为 20,那么,指定替换为 "$999" 将被看作 "$9" + "99";指定替换为 "$15" 将代表第 15 个捕获组。如果本来就是想把 "5" 当成字符串常量时("$1" + "5"),可以使用 $0015 表示,DEELX 最多识别 3 位 10 进制数字。 -------------------------------------------------------------------------------- ${name} 代表指定命名分组捕获到的内容。 -------------------------------------------------------------------------------- $$ 表示一个 $ 符号。 -------------------------------------------------------------------------------- $& 代表每次匹配到内容。 -------------------------------------------------------------------------------- $` 代表原字符串中,匹配到的内容之前的字符串。$` 中`符号就是键盘左上角"~"下边的那个符号。 -------------------------------------------------------------------------------- $' 代表原字符串中,匹配到的内容之后的字符串。$' 中 ' 符号就是单引号。 -------------------------------------------------------------------------------- $+ 代表所有“有捕获”的分组中,编号最大的那个分组。 举例:"aaa(b+)|ccc(b+)" 在匹配 "aaabbb" 时,虽然最大分组是第2个分组,但最大“有捕获”的是第1个分组,此时的 $+ 代表 $1 。 -------------------------------------------------------------------------------- $_代表被替换的 整个字符串。"_" 是下划线。 ~~~