正则表达式负面支持

时间:2019-06-07 16:47:19

标签: regex pcre

我可以用一只可能是简单正则表达式的手。我需要在包含字符串birth_dt_tm且前没有datetimezoneformat(的行上进行匹配。我尝试使用负向后看,但示例文本中的两行都匹配。

示例行:

    dob = datetimezoneformat(p.birth_dt_tm, p.birth_tz, "MM/DD/YYYY")
    dob2 = format(p.birth_dt_tm, "MM/DD/YYYY;;d")

我尝试了什么:

^.*(?<!datetimezoneformat\().*birth_dt_tm

使用PCRE,这将从行首到birth_dt_tm匹配两行。我只希望它与第二行匹配。

请参见此处获取示例-https://regex101.com/r/lv4nGK/1

1 个答案:

答案 0 :(得分:0)

PCRE中的Lookbehind不支持动态长度匹配。您可以使用 alternation 使用PCRE动词(*SKIP)(*FAIL)跳过并失败您不希望出现在结果中的匹配,而在RHS上使用您想要匹配的内容

\bdatetimezoneformat\([^)]*\bbirth_dt_tm\b(*SKIP)(*F)|\bbirth_dt_tm\b

RegEx Demo