我想把括号定义的标签中的内容放在下面的文本中,并把它们都放在一个数组中,我在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]"
您可能正在寻找这样的东西:
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"
}
}
您可以添加更多的方括号来捕获方括号内的文本。
你可以看看这个库是如何完成的,或者只是使用/更改它。
https://github.com/jbowens/jBBCode
编辑:如果您只需要以restab开头的标签。也许这就足够了:
$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="…"]开头的标签
preg_match_all("/'[[^']]*']/", $text, $matches);
正则表达式捕获[
和]
之间的$text
中的所有内容。如果您想匹配所有内容,而不仅仅是第一个实例
preg_match_all()