正则表达式找不到所有变量

时间:2011-03-07 12:49:54

标签: php regex

我正在解析一些我在表单中生成的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"

但是,回调函数输出匹配,但不会用返回替换它们。因此,$resultpreg_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" ) 

我认为它不会返回它应该的两个字符串。

1 个答案:

答案 0 :(得分:1)

对于遇到这样问题的其他人,请尝试检查你的正则表达式及其修饰符。

关于文档的解析,我仍在这样做,而不是HTML标签。相反,我更喜欢文本,可以更容易解析。就我而言:[*TokeName::TokenDetails*]