Regex 在分隔符之间匹配内部文本

Regex 在分隔符之间匹配内部文本,regex,Regex,我正在尝试构建一个正则表达式,该正则表达式能够找到起始分隔符和结束分隔符之间出现的所有文本,可能是任何类型的字符序列(尽管我可以接受不适用于非常特殊的分隔符组合的解决方案) 关键是我不希望匹配的字符串包含任何分隔符,例如给定的开始和结束为分隔符以及以下字符串: 开始比赛结束不匹配开始棘手的一个(不应该匹配)开始这是好的结束拖尾的事情 通常的方法会返回匹配“匹配”和“棘手的一个(不应该匹配)开始这是好的”,而我需要匹配“匹配”和“这是好的” 经过一些(大量)尝试后,我能够生成以下表达式,它捕获第一

我正在尝试构建一个正则表达式,该正则表达式能够找到起始分隔符和结束分隔符之间出现的所有文本,可能是任何类型的字符序列(尽管我可以接受不适用于非常特殊的分隔符组合的解决方案)

关键是我不希望匹配的字符串包含任何分隔符,例如给定的开始和结束为分隔符以及以下字符串:

开始比赛结束不匹配开始棘手的一个(不应该匹配)开始这是好的结束拖尾的事情

通常的方法会返回匹配“匹配”和“棘手的一个(不应该匹配)开始这是好的”,而我需要匹配“匹配”和“这是好的”

经过一些(大量)尝试后,我能够生成以下表达式,它捕获第一组中所需的字符串:

开始((?:(?!开始)。*)结束

你可以在这里试试

我担心的是,如果在每个角色上应用环视是一种太慢的方法,并且是否有更多我找不到的性能解决方案


即使没有,我仍然想分享我的解决方案,因为我在搜索过程中找不到另一个解决方案。

您可以使用负面前瞻,例如
((?!START)。*
,来搜索两个标记之间不包含
START
END
的字符串

下面是一个JavaScript匹配示例:

var text=“开始-匹配-结束-不匹配-开始-棘手的一个(不应该匹配)开始-这是好的结束-跟踪事情”;
var regex=/START((!START)(!END)。*?END/g;

console.log(text.match(regex))
您可以使用一个负向前看,例如
((?!START)。*
,来搜索两个标记之间不包含
START
END
的字符串

下面是一个JavaScript匹配示例:

var text=“开始-匹配-结束-不匹配-开始-棘手的一个(不应该匹配)开始-这是好的结束-跟踪事情”;
var regex=/START((!START)(!END)。*?END/g;

console.log(text.match(regex))您使用的工具/语言是什么?在这些情况下,当您需要两个字符串之间的最短窗口时,使用标记是正确的,但这确实会很慢。您可能需要展开此正则表达式。类似@WiktorStribiżew的内容从示例中删除U形修饰符;)@TimBiegeleisen我正在使用php,用preg_match搜索_all@WiktorStribiżew您的答案是否适用于任意开始和结束字符串?e、 g.如果它们以相同的字符开头会发生什么?您使用的是什么工具/语言?在这些情况下,当您需要两个字符串之间的最短窗口时,使用调和贪婪标记是正确的,但这确实会很慢。您可能需要展开此正则表达式。类似@WiktorStribiżew的内容从示例中删除U形修饰符;)@TimBiegeleisen我正在使用php,用preg_match搜索_all@WiktorStribiżew您的答案是否适用于任意开始和结束字符串?e、 g.如果它们以相同的字符开头会发生什么?