正则表达式模式 - 忽略空格、换行符、制表符等

Regex pattern - ignore whitespace, line breaks, tabs etc

我有这样的东西:

<div class="wp-caption">
    <a href="https://">
        <img src="https://" alt="blabla">
    </a>
</div>

我想用

替换它
<figure>
    <a href="https://">
        <img src="https://" alt="blabla">
    </a>
</figure>

我正在使用这样的正则表达式模式: 搜索 <div class="wp-caption">(.*)</div> 替换 <figure>(.*)</figure>

哪个工作正常,但当里面有换行符、空格、制表符或其他一些格式时,我怎么知道要忽略它?

我正在使用 Sublime Text..什么是使用 Perl 风格的表达式。

在 Perl 中这样使用怎么样?

s/<div class="wp-caption">(.*?)<\/div>/<figure><\/figure>/sg
  • 正则表达式替换操作与s///
  • 为避免贪婪匹配,使用 ?.*
  • 捕获的带(.*?)的字符串存储在变量$1中。
  • 正则表达式中的
  • / 可以使用 \(反斜杠)进行转义。
  • s 选项表示忽略换行符的单行模式。
  • g 选项表示全局匹配(处理所有匹配)。

这对我有用:

Find: (?s)<div class="wp-caption">(.*?)</div>
Replace: <figure></figure>

这里的技巧是 (?s) 使点匹配换行符,(.*?) 捕获 非贪婪 (将在下一个 </div>) <div> 标签的内容。

是对捕获组 1 的 反向引用

使用dotall修饰符如下:

(?s)<div[^>]+>(.*?)</div>

并替换为:

<figure></figure>

这应该有效,至少对于您的示例:

s/div(\sclass="wp-caption")?/figure/g;

在 sublime 上 Ctrl+f(Grep)

查找:

<div[^>]*>([\s\S]*?)</div>

替换:

<figure></figure>

除了 的回答之外,如果您不想使用内联标志,那么您可以使用这样的正则表达式技巧:

<div class="wp-caption">([\s\S]*?)</div>

用替换字符串:

<figure></figure>

Working demo

诀窍是使用 [\s\S],这意味着您将多次匹配空格和非空格(即所有内容)。

尝试一下它会起作用

$variable =~ s!<div(?:\s+[^<>)?)?>(.*?)</div>!
           my $div_cont = ;
           "<figure>".$div_cont."</figure>";
           !sge;