我正在使用此正则表达式从用户提交的内容中提取部分:
preg_match_all("~\[section name=[\"|'](.*?)[\"|']\](.*?)\[\/section\]~", $content, $matches, PREG_SET_ORDER);
目的是允许非技术用户轻松创建不同的命名部分。据我所知,PHP的bbcode解析器不允许我以这种方式将内容和属性值提取到数组中。
我不确定为什么preg_match_all parsing, only one match上接受的答案被接受,因为它表明preg_match_all默认情况下不会全局匹配,并且建议的g
标志似乎无效。
当前函数正确匹配,以便:
[section name="one"]this is section one[/section]
获取$matches
:
array (size=1)
0 =>
array (size=3)
0 => string '[section name="one"]this is section one[/section]'
1 => string 'one'
2 => string 'this is section one'
这是理想的行为。
但是,它不会向$matches
数组添加更多匹配项,只会添加第一个匹配项。
如果$matches
填充了给定字符串中的所有匹配项,我需要做什么?
答案 0 :(得分:1)
很奇怪,因为当我运行脚本时:
$content = '[section name="one"]this is section one[/section]<br />[section name="two"]this is section two[/section]';
preg_match_all("~\[section name=[\"|'](.*?)[\"|']\](.*?)\[\/section\]~", $content, $matches, PREG_SET_ORDER);
print_r($matches);
打印:
Array
(
[0] => Array
(
[0] => [section name="one"]this is section one[/section]
[1] => one
[2] => this is section one
)
[1] => Array
(
[0] => [section name="two"]this is section two[/section]
[1] => two
[2] => this is section two
)
)