Вы спрашиваете, как настроить конкретное программное обеспечение. Просто не говоря нам, какой. Это не вопрос программирования (PHP).
Разница между preg_match()
и preg_match_all()
заключается в том, что первое возвращает только одно совпадение, а другое возвращает все совпадения. Матч включает в себя полное совпадение и все захваченные группы.
Если я правильно понимаю, вы хотели бы объединить несколько захваченных групп в один строковый результат. Это очень легко с PHP, но не возможно с соответствием RegEx.
Вот пример PHP:
$data = <<<'XML'
<phone>
<countryCode>+45</countryCode>
<areaCode>354</areaCode>
<subscriberNumber>1631616</subscriberNumber>
</phone>
XML;
$pattern = <<<'PATTERN'
(<phone>\s*<\D+>(\+\d+)<\/\D+>\s*<\D+>(\d+)<\/\D+>\s*<\D+>(\d+)<\/\D+>\s*<\/phone>)
PATTERN;
preg_match($pattern, $data, $match);
$result = $match[1].' '.$match[2].' '.$match[3];
var_dump($result);
Вывод:
string(15) "+45 354 1631616"
В заменеэто будет часть строки замены, а не шаблон:
var_dump(preg_replace($pattern, '$1 $2 $3', $data));
Интересный факт: Xpath имеет некоторые функции агрегирования, поэтому это было бы возможно с выражением:
$document = new DOMDocument();
$document->loadXml($data);
$xpath = new DOMXpath($document);
var_dump(
$xpath->evaluate(
'concat(/phone/countryCode, " ", /phone/areaCode, " ", /phone/subscriberNumber)'
)
);
Вывод:
string(15) "+45 354 1631616"