如何在正则表达式中结合正面和负面条件?

aut*_*act 4 regex perl lookahead negative-lookahead regex-negation

我对正则表达式相当新,需要一些帮助.我需要在Perl中使用正则表达式过滤一些行.我将把正则表达式传递给另一个函数,所以它需要在一行中完成.

我想只选择包含"too long"但不包含的行"SKIPPING"

这是我的测试字符串:

跳过此债券到期以来太长
TKIPPING这个债券到期,因为太长时间
拍打着这个债券到期以来太长
你好这个期限太长,
这是太长
你好

正则表达式规则应与"太长"的以下内容匹配:


跳过这个债券,因为到期时间太长,因为成熟期过长,所以这个债券的成熟时间过长
你这个成熟期过长
这太久了

它应该跳过:

"你好那里",因为它不包含"太长时间"
"跳过这个债券,因为成熟期过长"因为它包含'跳过'

cha*_*aos 11

/^(?!SKIPPING).*too long/
Run Code Online (Sandbox Code Playgroud)

  • 实际上,这是一个负面的预测.负面的lookbehind确实有一个`<`...语法是`(?<!pattern)`. (4认同)

Pau*_*lin 10

就个人而言,我只是为了让它更清晰,我将它作为两个单独的正则表达式.

while (<FILE>)
{
  next if /^SKIPPING/;
  next if !/too long/;

   ... do stuff
}
Run Code Online (Sandbox Code Playgroud)

  • 你是什​​么意思"不是答案"?它完全符合他的要求,而不是完全按照他的想法去做.对我来说,这是一个答案. (9认同)