次のような文字列を一致させる方法を作成したいと思います
abc(xyz)
abc
abc(xyz)[123]
ここで、各ブラケットはオプションのユニットです。私が持ちたいのは、最適には、次のようなものです
preg_match_all('complicated regex', $mystring, $matches);
以下を$matches
返すと:
$mystring= abc(xyz)[123]R
与える場合$matches=array(0 => "abc", 1=> "xyz", 2=> "123", 3=> "R")
$mystring= abc(xyz)R
与える場合$matches=array(0 => "abc", 1=> "xyz", 2=> "", 3=> "R")
$mystring= abc[123]R
与える場合$matches=array(0 => "abc", 1=> "", 2=> "123", 3=> "R")
$mystring= abc(xyz)[123]
与える場合$matches=array(0 => "abc", 1=> "xyz", 2=> "123", 3=> "")
$mystring= abc
与える場合$matches=array(0 => "abc", 1=> "", 2=> "", 3=> "")
要点を理解していただければ幸いです。私は次のように試しました:
preg_match_all("/([a-z]*)(\([a-zA-Z]\))?(\[\w\])?/", "foo(dd)[sdfgh]", $matches)
matches[0]
は_
Array
(
[0] => foo
[1] =>
[2] => dd
[3] =>
[4] =>
[5] => sdfgh
[6] =>
[7] =>
)
追加の空の一致を取得するのはなぜですか? 必要な結果が得られないようにする方法 (inmatches
または in matches[0]
...)。