gpt4 book ai didi

java - 一个正则表达式来匹配一个子字符串,该子字符串后面没有某个其他子字符串

转载 作者:IT老高 更新时间:2023-10-28 11:28:44 24 4
gpt4 key购买 nike

我需要一个匹配 blahfooblah 的正则表达式但不是 blahfoobarblah

我希望它只匹配 foo 和 foo 周围的所有内容,只要它后面没有 bar。

我试过用这个:foo.*(?<!bar)相当接近,但匹配 blahfoobarblah .背后的负面形象需要匹配任何东西,而不仅仅是条形图。

我使用的特定语言是 Clojure,它在后台使用 Java 正则表达式。

编辑:更具体地说,我还需要它通过 blahfooblahfoobarblah但不是 blahfoobarblahblah .

最佳答案

试试:

/(?!.*bar)(?=.*foo)^(\w+)$/

测试:

blahfooblah            # pass
blahfooblahbarfail # fail
somethingfoo # pass
shouldbarfooshouldfail # fail
barfoofail # fail

正则表达式解释

NODE                     EXPLANATION
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
.* any character except \n (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
bar 'bar'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
.* any character except \n (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
foo 'foo'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
\w+ word characters (a-z, A-Z, 0-9, _) (1 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string

其他正则表达式

如果只想在foo之后直接排除bar,可以使用

/(?!.*foobar)(?=.*foo)^(\w+)$/

编辑

您更新了您的问题以使其具体化。

/(?=.*foo(?!bar))^(\w+)$/

新测试

fooshouldbarpass               # pass
butnotfoobarfail # fail
fooshouldpassevenwithfoobar # pass
nofuuhere # fail

新的解释

(?=.*foo(?!bar)) 确保找到 foo 但不直接跟随 bar

关于java - 一个正则表达式来匹配一个子字符串,该子字符串后面没有某个其他子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2631010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com