<?php
$str = '123.456.789.987,654,321,';
// preg_match_all('((?<grp1>\d{3})\.|(?<grp2>\d{3})\,)', $str, $matches);
preg_match_all('((?<grp1>\d{3})\.|(?<grp1>\d{3})\,)', $str, $matches);
print_r($matches);
?>
上記のコードに基づいて、すべての文字列を というグループ配列として取得したいのですgrp1
が、常に error になりますPHP Warning: preg_match_all(): Compilation failed: two named subpatterns have the same name at offset ...
。グループ名の1つを変更すると、grp2
うまく機能します。
preg_match_all で別のグループ名の代わりに 1 つのグループ名を使用することは可能ですか?
アップデート
このようなものを使用できないのには理由があります/(?<grp1>\d{3})[.,]/
。問題を解決するための例を次に示します。
<?php
$str = '
src="img1.png"
src="img2.jpg"
url(img3.png)
url(img4.jpg)
';
preg_match_all('/src=\"(?<img1>(\w+)(.png|.jpg))\"|url\((?<img2>(\w+)(.png|.jpg))\)/', $str, $matches);
print_r($matches);
?>
img1.png
すべての、img2.jpg
、img3.png
およびを、次のようなimg4.jpg
名前の配列グループに取りたいと考えています。img
[img] => Array
(
[0] => img1.png
[1] => img2.jpg
[2] => img3.png
[3] => img4.jpg
)