正则表达式提取属性的名称和值

时间:2010-09-10 18:58:09

标签: php regex

我有以下可能的字符串,我需要转换成数组,以便我可以将它们提供给一个html生成器。我并不盯着html或XML,我正在尝试创建一个速记,这将允许我使用更易读的代码更简单,更快速地填充我的html对象。

id='moo'
id = "foo" type= doo    value ='do\"o'
on_click='monkeys("bobo")'

我需要提取attribs及其相应的值。这些attrib字符串与html或xml标记无关。我想用1到3个正则表达式

来做
  • 该值可以用单引号或双引号括起来
  • 如果值用引号封装,它也可能包含空格,引号不同于封装引号或与封装引号相同的转义引号。
  • attrib和=之间可能有也可能没有空格,=和值。

最终结果应如下所示:

array(1) {
  [id] => moo
}
array(3) {
  [id] => foo
  [type] => doo
  [value] => do"o
}
array(1) {
  [on_click] => monkeys("bobo")
}

但如果结果如下:

array(2) {
  [0] => id
  [1] => moo
}
array(6) {
  [0] => id
  [1] => moo
  [2] => class
  [3] => foo
  [4] => value
  [5] => do"o
}

array(2) {
  [0] => on_click
  [1] => monkeys("bobo")
}

我可以从那里重新安排。

我尝试使用的一些以前的正则表达式及其问题:

  • /[\s]+/ - 仅当=
  • 周围没有空格时返回属性/值对
  • /(?<==)(\".*\"|'.*'|.*)$/ - 返回包含封装引号的值。虽然
  • 确实忽略了值中的转义引号
  • /^[^=]*/ - 返回属性就好了。无论attrib和=
  • 之间的空格如何

2 个答案:

答案 0 :(得分:1)

你想在这里特别使用正则表达式的任何特殊原因?看起来像基于令牌的解析器可能对你更好,因为你需要保持更多的状态,而不是在正则表达式中做得舒服。

答案 1 :(得分:0)

泰森

您似乎已经完成了一些解析以删除XML / HTML元素,现在正在尝试处理剩余的属性。通常,正则表达式不足以解析XML / HTML。

如果您可以访问XML / HTML,则应考虑使用PHP的DOM处理库/扩展来读取XML / HTML,并迭代/解析元素和属性。

以下是一个示例参考: