代码之家  ›  专栏  ›  技术社区  ›  Arthur

预匹配问题

  •  2
  • Arthur  · 技术社区  · 15 年前

    我肯定已经有人问过这个问题了,但在谷歌上搜索了一个多小时后,我决定在这里问我的问题。

    我想做一场预赛:

    $pattern = '/^#{1}+(\w+)+#{1}$/';
    if(preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE))
    {
       // do something with the #values#
    }
    

    以及

    $pattern = '/^#{2}+(\w+)+#{2}$/';
    if(preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE))
    {
       //do something with the ##value##
    }
    

    这很有效。 现在我唯一的问题是:

    当我有一根像

    $valueToMatch = 'proceding text #value#';
    

    我的preg\u match再也找不到我的价值了(因为我使用了“^”和“$”)。

    #value# 以及 ##value##

    *此外: 我想要的是找到模式并用db值和 ##价值## 例如:

    $thingsToReplace = 'Hello #firstname# #lastname#, 
    How nice you joined ##namewebsite##.';
    

    'Hello John Doe, 
    How nice you joined example.com.'
    
    2 回复  |  直到 13 年前
        1
  •  1
  •   Asaph    15 年前

    试试这个: /##([^#]+)##/ /#([^#]+)#/

        2
  •  0
  •   Arthur    15 年前

    也许很高兴知道其他访客我是怎么做到的:

    foreach($personalizeThis as $key => $value) 
    {
       //Replace ##values##
       $patternIniData = '/#{2}+(\w+)#{2}/';
       $return = 'website'; //testdata
       $replacedIniData[$key] = preg_replace($patternIniData, $return, $value);
    
       //Replace #values#
       $pattern = '/#{1}+(\w+)#{1}/';  
       $return = 'ASD'; //testdata
       $replacedDbData[$key] = preg_replace($pattern, $return, $replacedIniData[$key]);
    }
    

    返回$replacedDbData;

    推荐文章