カスタムタグがあります[tag val=100][/tag]
。どうすればval
タグの間に何が入るのですか?
元:
[tag val=100]apple[/tag]
value1 =
100value2=アップル
編集:タグ内に複数のアイテムがある場合はどうなりますか?
例:
[tag val=100 id=3]
カスタムタグがあります[tag val=100][/tag]
。どうすればval
タグの間に何が入るのですか?
元:
[tag val=100]apple[/tag]
value1 =
100value2=アップル
編集:タグ内に複数のアイテムがある場合はどうなりますか?
例:
[tag val=100 id=3]
質問にそのような文字列がある場合は、次preg_match
の代わりに使用できますpreg_match_all
:
$str = "[tag val=100]apple[/tag]";
preg_match("/\[.+? val=(.+?)\](.+?)\[\/.+?\]/", $str, $matches);
$value = $matches[1]; // "100"
$content = $matches[2]; // "apple"
更新:各要素に複数の属性がある可能性があります。その場合、これは機能するはずです。
// captures all attributes in one group, and the value in another group
preg_match("/\[.+?((?:\s+.+?=.+?)+)\](.+?)\[\/.+?\]/", $str, $matches);
$attributes = $matches[1];
$content = $matches[2];
// split attributes into multiple "key=value" pairs
$param_pairs = preg_split("/\s+/", $attributes, -1, PREG_SPLIT_NO_EMPTY);
// create dictionary of attributes
$params = array();
foreach ($param_pairs as $pair) {
$key_value = explode("=", $pair);
$params[$key_value[0]] = $key_value[1];
}
これはその正規表現になります。
'#\[tag val=([0-9]+)\]([a-zA-Z]+)\[\/tag])#'
Valは数字であり、「apple」は1つ以上のアルファベット文字の出現である可能性があります。[a-zA-Z]+
より多くの文字を一致さ.+?
せたい場合は、に置き換えます。