从这个问题的@skyfoot回答 regex-lookahead-lookbehind-and-atomic-groups
他说:given the string `foobarbarfoo`
bar(?=bar) finds the first bar.
bar(?!bar) finds the second bar.
(?<=foo)bar finds the first bar.
(?<!foo)bar finds the second bar.
you can also combine them
(?<=foo)bar(?=bar) finds the first bar.
发生了什么事情,假设我有字符串&#34; barfoobarbarfoo
&#34;
我想找到这些粗体文字
&#34;杆的 FOO 巴的栏 FOO&#34;
正则表达式可能是:(?<=bar)foo(????)bar(?=foo)
问题是中间应该是什么表达式(look ahead
或look behide
)?
答案 0 :(得分:1)
答案 1 :(得分:1)
完成你的例子:
bar(?=bar) finds the `bar` followed by `bar`
bar(?!bar) finds the `bar` NOT followed by `bar`
(?<=foo)bar finds the `bar` preceeded by `foo`
(?<!foo)bar finds the `bar` NOT preceeded by `foo`
因此,在您的情况下,您希望foo
先于bar
AND ,然后是bar
。使用上面的例子,这应该给出:
(?<=bar)foo(?=bar)
然后,要找到bar
之后的bar
AND ,然后是foo
,您应该使用:
(?<=bar)bar(?=foo)
最后,要结合这两种模式,您应该使用 OR 运算符,最终得到以下结果:
(?<=bar)foo(?=bar)|(?<=bar)bar(?=foo)