【问题标题】:Replace each character of matched text with certain text用特定文本替换匹配文本的每个字符
【发布时间】:2020-12-06 12:06:24
【问题描述】:

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

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

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

示例文本是这样的:

yVOdbtnRWSkpgi0iDWeRtyynyREV7yVKyNuJmsFmpSPtnlXaLb/Ik4zuyJFwqRWCGeIRp7m3Cef9kSjvCIrFG4iaweaB49WecZoNP8CTta79kVXpAcIVohHnsLcJ5+

我想将分组匹配($1)的所有字符转换为?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+

我该怎么做?

【问题讨论】:

    标签: regex pcre


    【解决方案1】:

    您可以使用此正则表达式进行搜索:

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

    并替换为:

    ?i
    

    RegEx Demo

    代码:

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

    正则表达式演示

    • (?&lt;=[^+/_-]\w):肯定的后视断言我们有一个不是 +/_- 的字符,后跟一个单词字符,后跟 上一个位置
    • \w:匹配一个单词字符
    • (?=\w[^+/_-]):肯定前瞻断言我们有一个单词字符后跟一个不是+/_- 的字符ahead

    【讨论】:

    • 我可以知道您为什么从我的答案中删除接受标记吗?是不是突然不行了?
    • 不幸的是,不
    • 我的正则表达式演示仍然显示您的预期输出,发生了什么变化?
    • 它也匹配 _ 但我不想匹配它
    • 非常感谢,请原谅我最近的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2020-11-12
    • 2012-05-01
    • 2013-10-05
    • 2014-06-21
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多