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

使用正则表达式[closed]将通配符值替换为变量

  •  1
  • weaveoftheride  · 技术社区  · 13 年前

    我正在使用php,需要找到下面定义的通配符字符串。然后,我需要在通配符值的末尾附加一个字符串。

    值为“awn.Funnel.Widget.createForm”(“awn.co.uk”,“--通配符--此处--”)

    以下是我尝试过的:

    if (preg_match('/awn.Funnel.Widget.createForm("awn.co.uk",[_a-zA-Z]+/', $competition_code, $matches)) { print_r ($matches); }
    

    但它给了我:

    Warning: preg_match(): Compilation failed: missing ) at offset 52
    
    2 回复  |  直到 13 年前
        1
  •  2
  •   anubhava    13 年前

    您的正则表达式:

    '/awn.Funnel.Widget.createForm("awn.co.uk",[_a-zA-Z]+/'
    

    应重写为:

    '/awn\.Funnel\.Widget\.createForm\("awn\.co\.uk",[_a-zA-Z]+/'
    

    或更好地使用 preg_quote function :

    $regex = '/' . preg_quote('awn.Funnel.Widget.createForm("awn.co.uk', '/') 
             . '[_a-zA-Z]+/';
    
        2
  •  1
  •   femtoRgon    13 年前

    preg_match的第一个参数:

    '/awn.Funnel.Widget.createForm("awn.co.uk",[_a-zA-Z]+/'
    

    是正则表达式模式。因此,角色“ ( '被解释为捕获组的开始。由于这不是您想要的,因此您需要逃离paren:

    '/awn.Funnel.Widget.createForm\("awn.co.uk",[_a-zA-Z]+/'
    

    你也应该逃跑 . ',因为如果不转义,这些字符将被解释为任何字符,而不是句点。