繁体   English   中英

Regex Negative Lookbehind 被忽略

[英]Regex Negative Lookbehind ignored

这是我的正则表达式:

(?<!PAYROLL)(FIDELITY(?!.*TITLE)(?!.*NATION)|INVEST)(?!.*PAYROLL)

这是我的文字

INCOMING WIRE TRUST GS INVESTMENT 
VANGUARD PAYROLL
PAYROLL FIDELITY
ACH CREDIT FIDELITY INVESTM-FIDELITY
ACH CREDIT FIDELITY INVESTM-FIDELITY
ACH DEBIT FIDELITY 
ACH DEBIT FIDELITY 
ACH CREDIT FIDELITY INVESTM-FIDELITY

http://regexr.com (使用 PCRE RegEx 引擎)上运行此程序时,它与"PAYROLL FIDELITY"匹配,但我指定了一个负面的后视不这样做(?<!PAYROLL)

任何帮助表示赞赏。

(?<!PAYROLL)否定后向查找与PAYROLL字符序列之前没有立即匹配的位置匹配。 PAYROLL FIDELITY字符串中, FIDELITY不是紧跟在PAYROLL之前,而是紧跟在PAYROLL + space之前。

您可以通过各种方式解决当前问题。 如果您确定字符串中的单词之间总是有一个空格(例如,它是一个标记化的字符串),请在PAYROLL之后添加\s(?<!PAYROLL\s)

如果可以有一个或多个空格,则(?<!PAYROLL\s+)模式在 PCRE 中不起作用,因为 PCRE 后视模式必须是固定宽度 您可能会匹配(某些)异常并使用(*SKIP)(*FAIL) PCRE 动词跳过它们:

PAYROLL\s+FIDELITY(*SKIP)(*F)|(FIDELITY(?!.*TITLE)(?!.*NATION)|INVEST)(?!.*PAYROLL)

请参阅正则表达式演示 您甚至可以将PAYROLL\s+FIDELITY(*SKIP)(*F)替换为PAYROLL.*?FIDELITY(*SKIP)(*F)PAYROLL[\s\S]+?FIDELITY(*SKIP)(*F)跳过PAYROLL中的任何文本块,直到最左边的FIDELITY PAYROLL\s+FIDELITY(*SKIP)(*F)匹配PAYROLL ,一个或多个空格, FIDELITY然后匹配失败触发回溯,然后跳过匹配并从失败的索引开始搜索下一个匹配发生了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM