gpt4 book ai didi

php - 请帮我写正则表达式替换

转载 作者:行者123 更新时间:2023-12-04 05:32:18 26 4
gpt4 key购买 nike

我还没有掌握正则表达式,因此非常感谢您对代码的帮助。

我需要替换所有以下行:

  • 以括号或圆括号开头;
  • 可能包含最多 3 个数字的常规数字或最多 3 个字母的组合;
  • 后面可能有一个句号;
  • 哪些数字或数字可能在或可能不在或标签内。

  • 这是需要替换的示例:
    (1)blahblah => %%(1)|blahblah
    (<i>iv</i>.) blahblah => %%(<i>iv</i>.)|blahblah
    [b] &nbsp;some stuff => %%[b]|&nbsp;some stuff

    因此,正则表达式需要识别是否需要将其应用于特定字符串,如果是,则将 %% 放在行首,然后将内容放在括号内,然后放入管道 | (如果括号和文本其余部分之间有空格,请删除该空格),最后放置该行的其余部分。

    因此,让我们假设我有一个数组,我正在尝试通过函数运行该数组,该函数将处理字符串(如果它符合条件),或者将其返回不变。

    我只需要知道如何编写函数。

    谢谢

    最佳答案

    这是我的版本。

    如果第一个不匹配(如前所述),它将使用回退正则表达式。

    Demo

    代码:

    <?php
    function do_replace($string) {
    $regex = '/^(\((?:<([a-z])>)?(\d{0,3}|[a-z]{1,3})(?:<\/\2>)?(\.)?\)|\[(?:<([a-z])>)?(\d{0,3}|[a-z]{1,3})(?:<\/\2>)?(\.)?\])\s*(.*)/i';
    $result = preg_match($regex, $string);
    if($result) {
    return preg_replace($regex, '%%$1|$8', $string);
    } else {
    $regex = '/^(\d{0,3}|[a-z]{1,3})\.\s*(.+)$/i';
    $result = preg_match($regex, $string);
    if($result) {
    return preg_replace($regex, '%%$1.|$2', $string);
    } else {
    return $string;
    }
    }
    }
    $strings = array(
    '(1)blahblah',
    '(<i>iv</i>.) blahblah',
    '[b] &nbsp;some stuff',
    '25. blahblah',
    'A. some other stuff. one',
    'blah. some other stuff',
    'text (1) text',
    '2008. blah',
    '[123) <-- mismatch'
    );
    foreach($strings as $string) echo do_replace($string) . PHP_EOL;
    ?>

    展开的第一个正则表达式:

    $regex = '
    /
    ^(
    \(
    (?:<([a-z])>)?
    (
    \d{0,3}
    |
    [a-z]{1,3}
    )
    (?:<\/\2>)?
    (\.)?
    \)
    |
    \[
    (?:<([a-z])>)?
    (
    \d{0,3}
    |
    [a-z]{1,3}
    )
    (?:<\/\2>)?
    (\.)?
    \]
    )
    \s*
    (.*)
    /ix';

    关于php - 请帮我写正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421422/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com