$data = "<Data>hello</Data>";
preg_match_all("/\<Data\>[.]+\<\/Data\>/", $data, $match);
print_r($match);
返回:
Array ( [0] => Array ( ) )
Array ( [0] => Array ( ) )
所以我猜没有匹配到?
你是对的,你的正则表达式没有匹配到任何东西。原因在于两点:
-
[.]+
的含义: 在正则表达式中,方括号[]
用于定义一个字符类。字符类匹配其中任何 一个 字符。.
在字符类中表示普通的点号,而不是匹配任何字符的通配符。因此,[.]+
匹配的是一个或多个连续的点号.
,而不是你期望的任何字符。 -
需要转义的字符:
在你的正则表达式中,
<
和>
是特殊字符,需要进行转义。
为了匹配
<Data>
标签之间的任何内容,你需要修改你的正则表达式:
$data = "<Data>hello</Data>";
preg_match_all("/<Data>(.+?)<\/Data>/", $data, $match);
print_r($match);
解释:
-
<Data>
和</Data>
: 匹配<Data>
和</Data>
标签。 -
(.+?)
: 匹配标签之间的任何字符 (.
匹配任何字符),并尽可能少地匹配字符 (+?
是非贪婪匹配)。括号用于捕获匹配的内容。
使用这个修改后的正则表达式,你会得到以下输出:
Array
(
[0] => Array
(
[0] => <Data>hello</Data>
)
[1] => Array
(
[0] => hello
)
)
输出结果是一个二维数组:
-
$match[0]
包含所有匹配到的完整字符串。 -
$match[1]
包含所有匹配到括号()
中的内容,这里是<Data>
标签之间的hello
。