【发布时间】:2010-11-08 10:23:00
【问题描述】:
我只是在尝试制作我的第一个正则表达式。我希望能够匹配一个伪 HTML 元素并提取有用的信息,例如标签名称、属性等:
$string = '<testtag alpha="value" beta="xyz" gamma="abc" >';
if (preg_match('/<(\w+?)(\s\w+?\s*=\s*".*?")+\s*>/', $string, $matches)) {
print_r($matches);
}
除了,我得到:
Array ( [0] => [1] => testtag [2] => gamma="abc" )
有人知道我如何获得其他属性吗?我错过了什么?
【问题讨论】:
-
您的第一个正则表达式不应该用于匹配 HTML/XML,因为这是正则表达式真正不擅长的一件事。相信我,它们很糟糕,你应该从一开始就避免使用它们。
-
但你必须承认这是了解它们的局限性的好方法。 ;)
-
可能,是的。 ;-) 使用正则表达式很容易培养一种“随心所欲”的态度,让您认为所有以文本表示的内容都是文本。 XML 和 HTML 不是文本,它们是结构化数据,应该使用数据工具而不是文本工具进行处理。提出警告的最佳时间是有人刚开始使用正则表达式时。 :)
-
感谢所有试图回答我问题的人。看起来不可能按照我想要的方式去做。呸骗子!当你可以使用二十个甚至整个库时,为什么还要使用一行代码?放弃 PHP,.NET 万岁!