如何在正则表达式中模拟否定查找
How can I simulate a negative lookup in a regular expression
我有以下包含负面展望的正则表达式。不幸的是,我使用的工具不支持正则表达式。所以我想知道是否有可能在不实际使用的情况下实现负面的前瞻行为。
这是我的正则表达式:
(?<![ABCDEQ]|\[|\]|\w\w\d)(\d+["+-]?)(?!BE|AQ|N)(?:.*)
此处正在处理 Regex101.com 上的示例数据:
see expression on regex101.com
我正在使用一个名为 Alteryx 的工具。该文档表明它使用 Perl,但是,无论出于何种原因,前瞻性都不起作用。
Alteryx 似乎使用 Boost 库来支持其正则表达式,Boost documentation 表示后向表达式必须具有固定长度。它比 PHP (PCRE) 更具限制性,它允许您在回顾中使用交替,只要每个分支都是固定长度的。但这很容易解决:只需使用多个 lookbehinds:
(?<![ABCDEQ])(?<!\[)(?<!\])(?<!\w\w\d)(\d+["+-]?)(?!BE|AQ|N)(?:.*)
该正则表达式在 Boost 驱动的正则表达式测试器中对我有用,而你的则不行。我会通过在字符集中放置方括号来进一步压缩它:
(?<![][ABCDEQ])(?<!\w\w\d)(\d+["+-]?)(?!BE|AQ|N)(?:.*)
当右括号是列出的第一个字符时,它被视为文字,而左括号从不特殊(尽管其他一些风格有不同的规则)。
这是更新后的 demo。
我有以下包含负面展望的正则表达式。不幸的是,我使用的工具不支持正则表达式。所以我想知道是否有可能在不实际使用的情况下实现负面的前瞻行为。
这是我的正则表达式:
(?<![ABCDEQ]|\[|\]|\w\w\d)(\d+["+-]?)(?!BE|AQ|N)(?:.*)
此处正在处理 Regex101.com 上的示例数据:
see expression on regex101.com
我正在使用一个名为 Alteryx 的工具。该文档表明它使用 Perl,但是,无论出于何种原因,前瞻性都不起作用。
Alteryx 似乎使用 Boost 库来支持其正则表达式,Boost documentation 表示后向表达式必须具有固定长度。它比 PHP (PCRE) 更具限制性,它允许您在回顾中使用交替,只要每个分支都是固定长度的。但这很容易解决:只需使用多个 lookbehinds:
(?<![ABCDEQ])(?<!\[)(?<!\])(?<!\w\w\d)(\d+["+-]?)(?!BE|AQ|N)(?:.*)
该正则表达式在 Boost 驱动的正则表达式测试器中对我有用,而你的则不行。我会通过在字符集中放置方括号来进一步压缩它:
(?<![][ABCDEQ])(?<!\w\w\d)(\d+["+-]?)(?!BE|AQ|N)(?:.*)
当右括号是列出的第一个字符时,它被视为文字,而左括号从不特殊(尽管其他一些风格有不同的规则)。
这是更新后的 demo。