【问题标题】:Change all table tags with preg_match_all使用 preg_match_all 更改所有表标签
【发布时间】:2014-06-19 14:41:27
【问题描述】:

我想将字符串中的所有标签更改为 [table1]、[table2] 等集合。

例如,

Hello there <table class="table1"><tr><td></td></tr></table>

Some text here

<table class="table2"><tr><td></td></tr></table>

Some text here

<table class="table3"><tr><td></td></tr></table>

收件人:

Hello there [table1]

Some text here

[table2]

Some text here

[table3]

使用

preg_match_all("@\<table (\s\S+)@s", $table_in_string, $match);
foreach ($match[1] as $key => $k) {

}

我这里的正则表达式似乎不起作用。

谢谢。

【问题讨论】:

  • 你从哪里得到这个正则表达式?试试"@\&lt;table(\s\S+)@s"
  • &lt;table 后面的空格去掉就行了regex101.com/r/iQ7oD1
  • 我认为使用单个正则表达式是不可能的。不,如果一个表标签也可以继续其他 html 标签。使用正则表达式解析 html 总是一个坏主意。您无法构建在所有可能情况下都有效的正则表达式。 (写下你的正则表达式,我可以给你它无法处理的有效 HTML)
  • 我……甚至都懒得去链接。小马。他来了。在人们学会使用正确的工具完成正确的工作之前,他将永远不会停止。
  • 嗯,你需要更像这样的东西:s/^(.*)(.*)$/\2/ this一个行不通,只是为了得到这个想法。

标签: php regex preg-match preg-match-all


【解决方案1】:

pregl_replace 示例:

$text = preg_replace( '/<table.*?class="(table\d+)".*?<\/table>/s', '[$1]', $text );

【讨论】:

    猜你喜欢
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多