标记与过滤器之间的正则表达式

时间:2015-09-03 11:48:25

标签: regex expression

tag(ALL:newlines,tabs,char,espaces)CAN0022(ALL:newlines, ..)/tag

我需要在tag(.|\s)*?\tag之间选择所有内容,但仅限于string = CAN{\d4}

我尝试了很多组合,但都失败了。

1 个答案:

答案 0 :(得分:1)

如果您一直在尝试匹配最近出现的tag,那么您应该尝试tempered greedy token

tag(?:(?!CAN\d{4}|/?tag)[\s\S])*CAN0022(?:(?!CAN\d{4}|/?tag)[\s\S])*/tag

请参阅demo

您需要将此正则表达式调整为您自己的引擎/编程语言(例如转义正斜杠)。您可以在单行/点模式下使用[\s\S],而不是.。另外,|/?tag应根据您需要匹配的真实文本进行调整。

关于(.|\s)*?的特别说明 - 不要使用它。当你的应用程序遇到灾难性的回溯时,你的应用程序会崩溃,这是非常低效的。相反,在dotall / singleline模式下使用点.(在模式的开头声明(?s),或使用相应的标志),或使用[\s\S]字符类(在JS中,它相当于[^])。