Regex 正则表达式查找具有起始词和结束词的最短字符串

Regex 正则表达式查找具有起始词和结束词的最短字符串,regex,Regex,我想找到一种方法来编写一个正则表达式来搜索以指定的起始子字符串开始并以另一个指定的结束字符串结束但其总长度最小的字符串。例如,在搜索字符串barbazbazfoobazfoo时,如果我的起始字符串是bar,而结束字符串是foo,那么我希望它返回barbazfoo 我知道如果一端只有一个字符或另一端只有一个字符,我可以使用a[^a].*b搜索,以在字符串axaxbxb中查找字符串axb,例如用字符替换上面的单词,但由于我在寻找单词而不是字符,我不能简单地说我不想要任何一个特定的字母,因为字母可以出

我想找到一种方法来编写一个正则表达式来搜索以指定的起始子字符串开始并以另一个指定的结束字符串结束但其总长度最小的字符串。例如,在搜索字符串
barbazbazfoobazfoo
时,如果我的起始字符串是
bar
,而结束字符串是
foo
,那么我希望它返回
barbazfoo

我知道如果一端只有一个字符或另一端只有一个字符,我可以使用
a[^a].*b
搜索,以在字符串
axaxbxb
中查找字符串
axb
,例如用字符替换上面的单词,但由于我在寻找单词而不是字符,我不能简单地说我不想要任何一个特定的字母,因为字母可以出现在两者之间

对于上下文,我正在尝试从服务器读取日志,并希望找到例如哪些用户遇到了特定错误,但在用户名出现的位置和异常发生的位置之间还有其他信息。因此,我不是在寻找这样一种解决方案,即在上述示例中,
foo
仅出现字母
f
o


附加示例:从第一段开始

案文如下:

Lookahead和Lookahead统称为“lookahound”,是零长度断言,就像本教程前面介绍的行的开始和结束以及单词的开始和结束锚一样。区别在于lookaround实际上匹配字符,但随后放弃匹配,只返回结果:匹配或不匹配。这就是为什么它们被称为“断言”。它们不使用字符串中的字符,而只声明匹配是否可能。Lookaround允许您创建没有它们无法创建的正则表达式,或者如果没有它们,正则表达式将变得非常冗长。


如果我的起始词是
lookaround
,而我的结束词是
match
,那么我希望找到子字符串
lookaround实际匹配
,请注意,目标词可能多次出现,并且可能与目标词共享字符的单词和字符数量未知。在上面的示例中,例如
lookaround[^lookaround]*?match
返回为未找到匹配项,因为语法似乎在寻找以避免每个字母
l
o
k
,。。。个别地。我想看看如何让它看起来避免子字符串而不是单个字母。

您必须使用以下标记:

matches
lookaround实际上匹配字符,但随后放弃匹配


matches
lookaround实际上是匹配的

很好,这似乎正是我想要的,更重要的是,它给了我一个搜索词,我可以用它来了解更多信息。对于未来的用户,这导致了上面的答案更详细地描述了代币。再次感谢。对于你的第一个例子,尝试一下,对于你的第二个例子,通过在单词之前向前看,例如:或者如果支持原子组/所有格量词,则更好。或者不写两次。
\blookaround\b(?:(?!\b(?:match|lookaround)\b).)*\bmatch\b
lookaround(?:(?!(?:match|lookaround)).)*match