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 ,正则表达式)