我对正则表达式还不熟悉,尤其是高级正则表达式(回顾或展望),
我有两条线,
- 选择在红色袋子里的球,或者在绿色袋子里的球
- 选择在绿色袋子里的球,或者在红色袋子里的球
我希望只有当第一个“袋子”之前的线条为红色时才进行匹配。如果第一个“袋子”之后的线条为红色,则不进行匹配(因此匹配 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