簡體   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