首页 > 解决方案 > 正则表达式负后向帮助

问题描述

我可以使用可能是一个简单的正则表达式的手。我需要匹配包含birth_dt_tm前面没有的字符串的行datetimezoneformat(。我尝试使用否定的lookbehind,但示例文本中的两行都匹配。

示例行:

    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

标签: regexpcre

解决方案


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

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

正则表达式演示


推荐阅读