我正在解析一些我在表单中生成的HTML。这是一个令牌系统。我试图稍后从Regexp获取信息,但不知何故,它只出现了第一场比赛。我在Web上发现了一个正则表达式,除了能够处理多次出现之外,它几乎完成了我所需要的工作。
我希望能够使用从找到的字符串生成的内容替换找到的内容。
所以,这是我的代码:
$result = preg_replace_callback("/<\/?\w+((\s+(\w|\w[\w-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>\[\*.*\*\]\<\/[a]\>/i", array(get_class($this), 'embed_video'), $str);
public function embed_video($matches)
{
print_r($matches);
return $matches[1] . 'foo';
}
我真的只需要属性,因为它们包含所有有价值的信息。标记的内容仅用于查找标记。这是需要发生的事情的一个例子:
<a type="TypeOfToken1" id="IdOfToken1">[*SomeTokenTitle1*]</a>
<a type="TypeOfToken2" id="IdOfToken2">[*SomeTokenTitle2*]</a>
应该返回preg_replace_callback()
之后:
type="TypeOfToken1" id="IdOfToken1" type="TypeOfToken2" id="IdOfToken2"
但是,回调函数输出匹配,但不会用返回替换它们。因此,$result
后preg_replace_callback
保持不变。可能是什么问题?
真实数据的一个例子:
输入:
<p><a id="someToken1" rel="someToken1">[*someToken1*]</a> sdfsdf <a id="someToken2" rel="someToken2">[*someToken2*]</a></p>
返回$result
:
id="someToken1" rel="someToken1"foo
如果是回调函数,则从print_r()
返回:
Array ( [0] => [*someToken1*] sdfsdf [*someToken2*] [1] => id="someToken1" rel="someToken1" [2] => rel="someToken1" [3] => rel [4] => ="someToken1" )
我认为它不会返回它应该的两个字符串。
答案 0 :(得分:1)
对于遇到这样问题的其他人,请尝试检查你的正则表达式及其修饰符。
关于文档的解析,我仍在这样做,而不是HTML标签。相反,我更喜欢文本,可以更容易解析。就我而言:[*TokeName::TokenDetails*]
。