匹配所有的正则表达式模式,当找到特定单词时 return null

Regex pattern to match all, and return null when specific words are found

我有这个正则表达式。 ^BRN.*?(?:paid|to)\s([A-Za-z\s]+)\b(?<!\bself)

我想要 return 所需模式后的词,但只是找不到某些词。如果找到它们,则正则表达式不应该 return 任何东西。因此,

BRN CLG-CI IQ PAID IONANDA PAUL

应该returnIONANDA PAUL,确实如此。所以那里是正确的。 但是我想要

BRN-TO CASH SELF

到 return 一个空字符串或本质上它匹配但 return 没有输出。目前,正则表达式 returns this CASH\s,\s 表示输出中包含空格。我尝试了负面回顾,但我仍在寻找如何不 return 任何东西,如果找到这个词。 谢谢!

注意your regex([A-Za-z\s]+)\b捕获了BRN-TO CASH SELF中的CASH ,因为一旦到达SELF之后的单词边界,负向后视就会触发回溯,并且正则表达式引擎重新匹配字符串并开始在 char 之后产生 char,同时沿着字符串返回最终找到 SELF 之前的单词边界位置,其中没有 SELF 因为整个单词立即出现该位置的左侧,这是一个有效的匹配项。

您可以在 \s:

之后使用负前瞻
^BRN.*?(?:paid|to)\s(?![A-Za-z\s]*\bself\b)([A-Za-z\s]+)
#                   ^^^^^^^^^^^^^^^^^^^^^^^

参见regex demo

现在,在匹配paidto之后的空格后,会触发一次负向先行检查,如果在任何零或self之后有一个完整的单词self更多 ASCII 字符或空白字符,整个匹配将失败,否则,它将成功。