我有一个regex语句:
&logline=(?:.*?\[Pipeline\]|\[[\d-]+T[\d:.]+Z\])?.*?(\[)
我希望它跳过.*?\[Pipeline\]
和\[[\d-]+T[\d:.]+Z\]
(如果它们存在的话),然后找到后面的a括号。
下面的例子应该匹配:
acs&logline=fsdafdsadsdsafdsa sdfs[Pipeline] ++ '[' lucky = as5712 ']'
ad&logline= Running on [4AZZVKFkf9ZNK6cEWbpgcClefWPKmoijZvh1OAAA=Docker2_lw in /ws/test_v3_2 :
&logline=[2023-09-28T19:39:25.868Z] ++ [[ 1 == \1 ]]
afdadsds&logline=[2023-09-28T19:39:25.868Z] ++ [[ ceed_test_runner == \J\O\B\P\O\O\L_\E\N\D_\O\F_\J\O\B\S ]]
这一个不应该匹配,但它确实:
- B
&logline=[2023-09-28T19:45:09.827Z] Removing yocto/poky/scripts/lib/
由于非捕获组是可选的,(?:...)?
测试用例1b挖掘该部分的括号。如果我把非捕获组设置为(?:...)
,我可以排除测试用例1b,但这也排除了我不想要的测试用例4a。
Lookaheads或lookbehinds似乎(也许我错了?),因为.*?\[Pipeline\]
是可变长度的。
1条答案
按热度按时间mtb9vblg1#
消极的前瞻应该起作用。Lookbehind必须是固定长度的,但Lookahead可以是可变长度的。因此,您可以在
\[
之后放置一个负向前查找的替代项。DEMO