ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 递归表达式 (?R) ##### \*\*递归表达式 (?R)\*\*针对表达式 反向引用针对匹配内容 格式说明**(?R)**对整个表达式的递归引用。**(?R1)**,**(?R2)**对指定分组的递归引用。**(?1)**,**(?2)**对指定命名分组的递归引用**(?R)**对指定命名分组的递归引用。**(?R'named')**对指定命名分组的递归引用``` <pre class="calibre10">``` $subject<span class="token1">=</span><span class="token2">'e+f (-(g/(h-i))*j'</span><span class="token3">;</span> $pattern<span class="token1">=</span><span class="token2">"/\(([^()]|(?R))*\)/i"</span><span class="token3">;</span> <span class="token4">preg_match_all</span><span class="token3">(</span>$pattern<span class="token3">,</span> $subject<span class="token3">,</span> $matches<span class="token3">,</span> PREG_OFFSET_CAPTURE<span class="token3">)</span><span class="token3">;</span> <span class="token4">dump</span><span class="token3">(</span>$matches<span class="token3">)</span><span class="token3">;</span> ``` ``` ![](https://img.kancloud.cn/bd/48/bd4883a84c163063e719a6a51c0f5fd2_285x202.png) ``` <pre class="calibre10">``` <span class="token3">(</span>\w<span class="token3">)</span><span class="token3">(</span><span class="token1">?</span><span class="token6">1</span><span class="token3">)</span> 等效于 <span class="token3">(</span>\w<span class="token3">)</span><span class="token3">(</span>\w<span class="token3">)</span> <span class="token">// (?1)代表引用第一个分组即\w (?2)代表引用第二个分组即\d</span> <span class="token3">(</span><span class="token1">?</span><span class="token6">1</span><span class="token3">)</span><span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span><span class="token1">?</span><span class="token6">2</span><span class="token3">)</span><span class="token3">)</span><span class="token3">(</span>\d<span class="token3">)</span><span class="token1">=</span><span class="token1">></span><span class="token3">(</span><span class="token1">?</span><span class="token6">1</span><span class="token3">)</span><span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span>\d<span class="token3">)</span><span class="token3">)</span><span class="token3">(</span>\d<span class="token3">)</span><span class="token1">=</span><span class="token1">></span><span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span>\d<span class="token3">)</span><span class="token3">)</span><span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span>\d<span class="token3">)</span><span class="token3">)</span><span class="token3">(</span>\d<span class="token3">)</span> <span class="token">//被引用的表达式又包含自身,则形成了递归引用</span> <span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span><span class="token1">?</span><span class="token6">1</span><span class="token3">)</span><span class="token1">?</span><span class="token3">)</span><span class="token1">=</span><span class="token1">></span><span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span><span class="token1">?</span><span class="token6">1</span><span class="token3">)</span><span class="token1">?</span><span class="token3">)</span><span class="token1">?</span><span class="token3">)</span><span class="token1">=</span><span class="token1">></span><span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span>\<span class="token4">w</span><span class="token3">(</span><span class="token1">?</span><span class="token6">1</span><span class="token3">)</span><span class="token1">?</span><span class="token3">)</span><span class="token1">?</span><span class="token3">)</span><span class="token1">?</span><span class="token3">)</span><span class="token1">=</span><span class="token1">></span><span class="token3">.</span><span class="token3">.</span><span class="token3">.</span><span class="token1">=</span><span class="token1">></span><span class="token3">(</span>\w<span class="token1">+</span><span class="token3">)</span> ``` ``` php中正则表达式替换语法 ``` <pre class="calibre17">``` $<span class="token6">1</span> <span class="token1">~</span> $<span class="token6">999</span> 代表某个捕获组捕获到的内容。如果捕获组编号大于表达式中的最大捕获组编号,那么 DEELX 会减少数字个数,以使捕获组编号小于或等于最大编号;而把剩余的数字看作字符串常量。 举例: 当前最大捕获组编号为 <span class="token6">20</span>,那么,指定替换为 <span class="token2">"$999"</span> 将被看作 <span class="token2">"$9"</span> <span class="token1">+</span> <span class="token2">"99"</span>;指定替换为 <span class="token2">"$15"</span> 将代表第 <span class="token6">15</span> 个捕获组。如果本来就是想把 <span class="token2">"5"</span> 当成字符串常量时(<span class="token2">"$1"</span> <span class="token1">+</span> <span class="token2">"5"</span>),可以使用 $<span class="token6">0015</span> 表示,DEELX 最多识别 <span class="token6">3</span> 位 <span class="token6">10</span> 进制数字。 <span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span> $<span class="token3">{</span>name<span class="token3">}</span> 代表指定命名分组捕获到的内容。 <span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span> $$ 表示一个 $ 符号。 <span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span> $<span class="token1">&</span> 代表每次匹配到内容。 <span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span> $` 代表原字符串中,匹配到的内容之前的字符串。$` 中`符号就是键盘左上角<span class="token2">"~"</span>下边的那个符号。 <span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span> $' 代表原字符串中,匹配到的内容之后的字符串。$<span class="token2">' 中 '</span> 符号就是单引号。 <span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span> $<span class="token1">+</span> 代表所有“有捕获”的分组中,编号最大的那个分组。 举例:<span class="token2">"aaa(b+)|ccc(b+)"</span> 在匹配 <span class="token2">"aaabbb"</span> 时,虽然最大分组是第<span class="token6">2</span>个分组,但最大“有捕获”的是第<span class="token6">1</span>个分组,此时的 $<span class="token1">+</span> 代表 $<span class="token6">1</span> 。 <span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span><span class="token1">--</span> $_代表被替换的 整个字符串。<span class="token2">"_"</span> 是下划线。 ``` ```