tag(ALL:newlines,tabs,char,espaces)CAN0022(ALL:newlines, ..)/tag
我需要在tag(.|\s)*?\tag
之间选择所有内容,但仅限于string = CAN{\d4}
。
我尝试了很多组合,但都失败了。
答案 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中,它相当于[^]
)。