如果正则表达式中某个字符串出现在另一个字符串之前,如何停止搜索

如果正则表达式中某个字符串出现在另一个字符串之前,如何停止搜索

我对正则表达式还不熟悉,尤其是高级正则表达式(回顾或展望),

我有两条线,

  1. 选择在红色袋子里的球,或者在绿色袋子里的球
  2. 选择在绿色袋子里的球,或者在红色袋子里的球

我希望只有当第一个“袋子”之前的线条为红色时才进行匹配。如果第一个“袋子”之后的线条为红色,则不进行匹配(因此匹配 1 而不是 2)

如果我使用以下正则表达式,

sort.+?red(?!bag)

或者

sort.+?(?!bag)red

在两种情况下它似乎仍然与第 2 行匹配。

任何提示/答案都将受到赞赏。

答案1

这个做的工作:

^(?:(?!\bbag\b).)*\bred\b.+?\bbag\b

解释:

^               # beginning of line
                # tempered greedy token
  (?:           # start non capture group
    (?!         # negative lookahead
      \bbag\b   # "bag" surrounded with word boundary, not matching bags or airbag
    )           # end lookahead
    .           # any character
  )*            # end group, may appear 0 or more times
  \bred\b       # "red" surrounded with word boundary, not matching tired or redition
  .+?           # 1 or more any character, not greedy
  \bbag\b       # "bag" surrounded with word boundary

演示

相关内容