Sublime Text 正则表达式未检测到多行标签

Posted

技术标签:

【中文标题】Sublime Text 正则表达式未检测到多行标签【英文标题】:Sublime Text regex not detecting multiline tags 【发布时间】:2014-11-25 06:53:29 【问题描述】:

我这里有这个正则表达式;

\[sometag\](.*)\[/sometag\]

应该捕获被[sometag] 标记包围的文本。它适用于这些标签中包含的单行信息,例如字符串[sometag]this is a bit of text[/sometag]。但它不适用于像这样跨越多行的文本;

[sometag] here is more text

it spans more than one line [/sometag]

由于某种原因,Sublime 文本的正则表达式查找器无法识别多行的标签。我想知道这是 Sublime Text 的问题、可切换的选项,还是我个人对正则表达式的无能。

【问题讨论】:

【参考方案1】:

在开始时,使用 dotall 修饰符 (?s) 使 dot 也匹配换行符。

(?s)\[sometag\](.*?)\[\/sometag\]

DEMO

【讨论】:

谢谢!为什么我必须包含这些额外的问号? ?* 之后将进行非贪婪匹配。以[b]foo[/b]foo[b]bar[/b] 为例。 \[b\].*\[\/b\] 将匹配从开始 b 到最后结束 b 的整体。 只是在这个regex101.com/r/gI0xC3/2中添加和删除? (?s) 使点也包含换行符【参考方案2】:

如果由于某些原因不允许修改点的模式,您可以这样:

[sometag](.|\n)+?[/sometag]

【讨论】:

如果您有权访问 DOTALL 修饰符,切勿使用 (.|\n)+?。如果您不能使用(?s),请使用[\s\S]/[\d\D]/[\w\W],但不要使用此处建议的交替模式。这种模式效率极低,很容易导致超时问题。 @WiktorStribiżew:你能解释一下为什么它效率低吗?我总是使用[\s\S],但乍一看(.|\n) 似乎等效?是否与匹配组有关?但是(?:.|\n) 会是一样的吗?

以上是关于Sublime Text 正则表达式未检测到多行标签的主要内容,如果未能解决你的问题,请参考以下文章

文本 去除重复行(sublime Text3 ,正则表达式)

js 正则表达式未按预期工作。未检测到换行符[重复]

sublime text怎么使用高级正则查找替换

使用sublime text3,用正则表达式统一去除coordinates标签内的内容,试了很多方式都无效。

sublime Text3 插件编写教程_第一课

使用 Sublime Text 3 处理数据