我想在下面的文本中放置来自括号定义的标签的内容并将它们全部放入一个数组中,我在PHP和preg_match
函数中的尝试已多次失败。我应该在PHP中使用preg_match
函数做什么?
$string="[restab title="name"]John O'Brian[/restab][restab title="telephone"]+15254636544[/restab][restab title="address"]Newyork, Wallstreet Ave, No 5[/restab]"
答案 0 :(得分:1)
您可以查看此库是如何完成的,或者只是使用/更改它。
https://github.com/jbowens/jBBCode
修改强> 如果您只需要以restab开头的标签。 Perhapse这就足够了:
$text = '[restab title="name"]John O\'Brian[/restab][restab title="telephone"]+15254636544[/restab][restab title="address"]Newyork, Wallstreet Ave, No 5[/restab]';
preg_match_all("#\[restab title=\"(.+?)\"](.*?)\[/restab\]#",$text,$matches);
这将使每个标签以[restab title =“...”]
开头答案 1 :(得分:1)
你可能正在寻找这样的东西:
preg_match_all('/\[[^]]+\]([^[]+)\[\/[^]]+\]/is', $string, $matches);
这会给您以下结果:
array(2) {
[0]=>
array(3) {
[0]=>
string(42) "[restab title="name"]John O'Brian[/restab]"
[1]=>
string(47) "[restab title="telephone"]+15254636544[/restab]"
[2]=>
string(62) "[restab title="address"]Newyork, Wallstreet Ave, No 5[/restab]"
}
[1]=>
array(3) {
[0]=>
string(12) "John O'Brian"
[1]=>
string(12) "+15254636544"
[2]=>
string(29) "Newyork, Wallstreet Ave, No 5"
}
}
您可以添加更多括号以捕获方括号内的文本。
答案 2 :(得分:0)
preg_match_all("/\[[^\]]*\]/", $text, $matches);
正则表达式捕获$text
和[
之间]
中的所有内容。
如果要匹配所有内容而不仅仅是第一个实例
preg_match_all()