【发布时间】:2011-02-11 12:21:38
【问题描述】:
我需要为 WP-Plugin 找到所有出现的标签。
<wpg3>10|300|defaultTemplate|eyJhbGlnbiI6ImFsaWdubGVmdCJ9</wpg3>
标签 (,,, ...) 有多个可能的版本,但 start 和 end 匹配。组是可选的:应该意味着,可以没有或一个,或两个或三个“|”,它们分隔选项。
我的问题:如果我的搜索字符串中只有一个标签,一切都会按预期工作。 但是如果我在我的字符串中添加第二个标签,回调只会被调用一次,而不是每个标签一次。在开始或结束时必须缺少一些东西。 如果 last Argument (功能)丢失,则 Regexp 使用多个标签会失败。
$return = preg_replace_callback('/<wpg[23](?P<unused>id)?>(?P<uri_or_id>[^\|]*)[\|]?(?P<width>[^\|]*)[\|]?(?P<template>[^\|]*)[\|]?(?P<features>[^\|]*)<\/wpg[23](?P<unused2>id)?>/i', array( $this, 'wpg3_content' ), $content );
我以上面的例子为例:
Array
(
[0] => 10|300|defaultTemplate|eyJhbGlnbiI6ImFsaWdubGVmdCJ9
[unused] =>
[1] =>
[uri_or_id] => 10
[2] => 10
[width] => 300
[3] => 300
[template] => defaultTemplate
[4] => defaultTemplate
[features] => eyJhbGlnbiI6ImFsaWdubGVmdCJ9
[5] => eyJhbGlnbiI6ImFsaWdubGVmdCJ9
)
【问题讨论】:
-
|分隔符之间可以没有值吗?通过标签,你的意思是<wpg3>,对吧?
标签: php regex html-parsing