使用正则表达式

时间:2016-10-09 21:34:17

标签: php regex

我有类似的东西;



<a href="#" class="example">
Link 1
</a>
<a href="#" class="example">
Link 2
</a>
<a href="#" class="example">
Link 3
</a>
&#13;
&#13;
&#13;

我希望在锚文本之前添加标签。像这样;

&#13;
&#13;
<a href="#" class="example">
  Link 1
</a>
<a href="#" class="example">
  Link 2
</a>
<a href="#" class="example">
  Link 3
</a>
&#13;
&#13;
&#13;

如何使用正则表达式执行此操作?

1 个答案:

答案 0 :(得分:1)

编辑,跟随问题扩展

根据他的评论,现在看来OP的目标是更常用,在开始和结束标记之间添加{em} 缩进所有行。{
然后是时候记住正则表达式不是一种解析HTML的好方法,就像在这里经常观察到的那样。

但在这个但不太宽泛的背景下,我们可以提出一个解决方案 除非有人找到更好的解决方案,否则我没有办法在没有2个嵌套步骤的情况下做到这一点:

\t

请注意,除了做得不好之外,由于$updated_text = preg_replace_callback( '/(<a[^>]*>)\s*(.*?)\s*(<\/a>)/s', function($matches) { return $matches[1] . "\n" . preg_replace('/([^\n]+)/', "\t$1", $matches[2]) . "\n" . $matches[3]; }, $text ); (非贪婪)量词,它耗费了大量时间。

初步答案

感谢@bobblebubble的建议我只是明白了什么意思&#34;我想要添加标签&#34; (我之前只想过浏览器标签:)。

但我发现它的解决方案有点过于笼统:它会将标签添加到任何行,而不是标签!
我更愿意只仔细查找.*?个标签,并且只有在OP的示例中才会显示:

<a>

这是有效的:https://regex101.com/r/qo2N22/1