用特定文本替换匹配文本的每个字符

Replace each character of matched text with certain text

我使用 PCRE 正则表达式,但在替换匹配文本的每个单词时遇到问题。

我使用此模式将所需文本与分组相匹配:

(?<=^|[_\-/:]\w)(\w+?)(?=\w[_\-/:]|$)

示例文本是这样的:

yVOdbtnRWSkpgi0iDWeRtyynyREV7yVKyNuJmsFmpSPtnlXaLb/Ik4zuyJFwqRWCGeIRp7m3Cef9kSjvCIrFG4iaweaB49WecZoNP8CTta79kVXpAcIVohHnsLcJ5+

我想将分组匹配 () 的所有字符转换为 ?i:

yV?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?iLb/Ik?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?i?iJ5+

我该怎么做?

您可以使用这个正则表达式来搜索:

~(?<=[^+/_-]\w)\w(?=\w[^+/_-])~

并替换为:

?i

RegEx Demo

代码:

$repl = preg_replace('~(?<=[^+/_-]\w)\w(?=\w[^+/_-])~', '?i', $str);

正则表达式演示

  • (?<=[^+/_-]\w):正面回溯断言我们有一个字符不是 +/_- 后跟一个单词字符后跟在 前一个位置
  • \w:匹配一个单词字符
  • (?=\w[^+/_-]):正面前瞻断言我们有一个单词字符后跟一个不是 +/_ 和 [=17 的字符=] 提前