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, поэтому переключитесь на реальный синтаксический анализатор для чего-то нетривиального.