$data = "<Data>hello</Data>";
preg_match_all("/\<Data\>[.]+\<\/Data\>/", $data, $match);
print_r($match);这将返回:
Array ( [0] => Array ( ) )所以我猜是不是匹配了?
发布于 2010-06-04 20:40:13
preg_match_all("#<Data>.+</Data>#", $data, $match);如果您想使用/作为分隔符:
preg_match_all("/<Data>.+<\/Data>/", $data, $match);主要问题是字符类中的.与文字句点匹配。此外,使用不同的分隔符可以消除转义。请注意,无论哪种方式,您都不必转义<。如果您希望能够提取内部值,请使用:
preg_match_all("#<Data>(.+)</Data>#", $data, $match);在您的示例中,"hello“现在将出现在$matches[1]中。请注意,正则表达式不适合解析XML,因此对于任何重要的事情,请切换到真正的解析器。
发布于 2010-06-04 20:40:36
您正在使用[]和。不正确。
试试这个:
$data = "<Data>hello</Data>";
preg_match_all("/\<Data\>.+\<\/Data\>/", $data, $match);
print_r($match);当您使用[]定义一个可能的字符列表时,在本例中,您定义的字符仅限于。只有这样。如果要使用。要定义任何字符,必须在[]之外使用它。
发布于 2010-06-04 20:42:36
<?php
$data = "<Data>hello</Data>";
preg_match_all('#<Data>(.+)</Data>#', $data, $match);
print_r($match);
?>输出:(as seen on ideone.com)
Array
(
[0] => Array
(
[0] => <Data>hello</Data>
)
[1] => Array
(
[0] => hello
)
)[...]是一个字符类定义。您可以使用(...)来捕获。
参考文献
关于不情愿匹配的特别说明
由于您使用的是preg_match_all,应该注意的是,您当前正在贪婪地匹配。也就是说,比方说,在<Data>hello</Data><Data>how are you</Data> (see on ideone.com)中只有一个匹配。
如果同时需要两个<Data>元素,则必须使用不情愿的匹配'#<Data>(.+?)</Data>#' (see on ideone.com)。
举例说明:
----A--Z----A----Z----
^^^^^^^^^^^^^^
A.*Z在上面的输入中只有一个A.*Z匹配。
有关解析HTML/XML的正则表达式的特别说明
这是一种痛苦。如果可能,请使用适当的HTML/XML解析器。PHP有很多。
https://stackoverflow.com/questions/2974142
复制相似问题