【问题标题】:Replace paragraph tag using regex使用正则表达式替换段落标签
【发布时间】:2012-12-04 00:39:15
【问题描述】:

我需要获取$one 的输出并创建一个数组,但是,正则表达式不正确,因为我得到的只是一个具有一个键和一个值的数组;基本上,整个字符串。如果字符串中有 10 个段落标签,那么我应该在数组中得到 10 个值。

我的正则表达式有什么问题?

理想情况下,我希望输出数组中有两个数组,一个带有段落标签,另一个带有它们之间的文本。

$one = preg_replace( '/<p>/i', '<p class="test">', $str ); // This gives me what I need
print_r(explode( '/<p class="test">/iU', $one )); // This does not

【问题讨论】:

  • 我知道我不应该但是... stackoverflow.com/a/1732454/496223
  • @yes123,感谢您的链接。我认为正则表达式可以解析任何东西。你能建议我如何将 $one 的输出放入数组中吗?
  • afaik,explode 不能根据正则表达式进行拆分,但 preg_split 可能会有所帮助。
  • 是的,当我发现正则表达式不能做所有事情时,我也做了手掌脸
  • 请注意,由于 html 的嵌套性质,正则表达式可能不是处理它的最佳方式

标签: php regex


【解决方案1】:

问题很简单。 Explode 不使用正则表达式。这应该适合你。

print_r(explode('<p class="test">', $one ));

编辑:这应该做你想做的。

$pattern = '/(?P<open><p class="test">)'
          . '(?P<content>.*)'
          . '(?P<close><\/p>)/i';
preg_match_all($pattern, $one, $matches);
print_r($matches);

编辑:没有匹配标签的简化版本:

$pattern = '/(<p class="test">)(.*)(<\/p>)/i';
preg_match_all($pattern, $one, $matches);
print_r($matches);

【讨论】:

  • 谢谢。这确实有效,但我希望在数组中获得段落标签。我不认为爆炸会做到这一点。还有其他选择吗?
  • preg_match 将允许您匹配元素...给我一分钟。
  • 我已经尝试过了,但是得到了 14 个空数组。 print_r(preg_split( '/&lt;p class="test"&gt;(.*)&lt;\/p&gt;/iU', $one ));
  • 谢谢。这就是我得到的:preg_match(): Unknown modifier 'p'
  • 这可能只是'#&lt;p class="test"&gt;(.*?)&lt;/p&gt;#i',更容易阅读恕我直言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多