このタスクはかなり明確です。入力では、おそらくという名前のサブパターンを含む変数正規表現パターンを、持っている、との出力に、私たちはサブパターンの名前の配列を取得する必要があります。パターン内のpreg_match_allサブパターン名
function get_subpattern_names($any_input_pattern) {
// What pattern to use here?
$pattern_to_get_names = '/.../';
preg_match_all($pattern_to_get_names, $any_input_pattern, $matches);
return $matches;
}
そこで質問が関数に$pattern_to_get_names
として使用するものです上記?例えば
:
get_subpattern_names('/(?P<name>\w+): (?P<digit>\d+)/');
が返さなければならない:
array('name', 'digit');
P.S:PCRE documentationサブパターン名によるとは、最大32個の文字の英数字および下線で構成されています。
入力パターンを制御しないので、名前付けの考えられるすべての構文を考慮する必要があります。 PHP documentationによれば、それらは:
(?P<name>pattern)
,(?<name>pattern)
および(?'name'pattern)
である。
ネストされたサブパターンも考慮する必要があります(例:
(?<name1>.*(?<name2>pattern).*)
)。
名前の重複をカウントしたり、出現順序を保持したり、数字、非キャプチャなどのサブパターンを取得する必要はありません。名前のリストだけが存在する場合。
https://ideone.com/UoLUYBとhttps://regex101.com/r/Rfx389/1 –