【问题标题】:Regular Expression Help Needed - Advanced Search and Replace需要正则表达式帮助 - 高级搜索和替换
【发布时间】:2014-06-17 18:17:23
【问题描述】:

我有一个类似

的字符串
"'Joe'&@[Uk Customers.First Name](contact:16[[---]]first_name) +@[Uk Customers.Last Name](contact:16[[---]]last_name)"

我的要求是开始寻找模式

@[A.B](contact:**digit**[[---]]**field**)

单个字符串中可以有多个模式。

并用 digitfield

生成的动态文本将其替换为新字符串(应替换整个模式)

对于上述字符串的示例,有两个匹配项

第一个匹配是:array(digit => 16, field =>first_name)

第二个匹配是:array(digit => 16, field =>last_name)

在某处我有一些规则是

如果数字为 16 且字段为 first_name,则将模式替换为“John” 如果数字为 16 且字段为姓氏,则将模式替换为“Doe”

所以输出字符串将是“'Joe'&John+Doe”

提前致谢。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    匹配部分相当简单。这样就可以了:

    @\[[^.]+\.[^.]+\]\(contact:(\d+)\[\[---\]\]([^)]+)\)
    

    Debuggex Demo

    Regex101 Demo

    在 PHP(和其他支持命名捕获组的语言)中,您可以这样做以使数组包含键“数字”和“字段”:

    @\[[^.]+\.[^.]+\]\(contact:(?<digit>\d+)\[\[---\]\](?<field>[^)]+)\)
    

    示例 PHP 代码:

    $regex = '/@\[[^.]+\.[^.]+\]\(contact:(?<digit>\d+)\[\[---\]\](?<field>[^)]+)\)/';
    $text = '"\'Joe\'&@[Uk Customers.First Name](contact:16[[---]]first_name) +@[Uk Customers.Last Name](contact:16[[---]]last_name)"';
    
    
    preg_match_all($regex, $text, $matches, PREG_SET_ORDER);
    
    var_dump($matches);
    

    结果:

    array(2) {
      [0]=>
      array(5) {
        [0]=>
        string(55) "@[Uk Customers.First Name](contact:16[[---]]first_name)"
        ["digit"]=>
        string(2) "16"
        [1]=>
        string(2) "16"
        ["field"]=>
        string(10) "first_name"
        [2]=>
        string(10) "first_name"
      }
      [1]=>
      array(5) {
        [0]=>
        string(53) "@[Uk Customers.Last Name](contact:16[[---]]last_name)"
        ["digit"]=>
        string(2) "16"
        [1]=>
        string(2) "16"
        ["field"]=>
        string(9) "last_name"
        [2]=>
        string(9) "last_name"
      }
    }
    

    我不太清楚您要用于替换的逻辑,所以恐怕我无法在没有澄清的情况下提供帮助。

    【讨论】:

    • 非常感谢...它救了我的命 :) 谢谢
    • +1 获取详细解决方案 :)
    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多