[英]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.