我有这个描述,用户提到标签。
[MENTION = 1]一个[/ MENTION] [MENTION = 4]两个[/ MENTION] [MENTION = 748]三个[/ MENTION] HI,这是我!!
我需要知道谁是本说明书中提到的成员,所以我希望。
['one','two','three']
这是我尝试过的:
preg_match_all('/[MENTION=[1-9]](.*?)[\/MENTION]/s', $html, $matches);
if($matches) print_r($matches[1]);
输出:
[
[0] => one[
[1] => [
[2] => two[
[3] => [
[4] => three[
[5] => H
]
如果我需要获得1,4,748的数字怎么办?
答案 0 :(得分:3)
方括号是RegEx中的保留字符。你需要逃脱它们。这样的事情应该有效:
preg_match_all('/\[MENTION=([1-9]+)\](.*?)\[\/MENTION\]/s', $html, $matches);
我还在ID ([1-9]+)
周围添加了一个捕获组,因此您可以获得匹配项中的数值和文字内容($matches[1]
将包含数字和$matches[2]
将包含文本内容。)
答案 1 :(得分:2)
(\d+)
抓取一个或多个号码的小组
(\w+)
捕获一个或多个单词字符组
正如您从[1-9]
所知,方括号[]
是正则表达式中表示字符集的特殊字符。所以,如果你真的想要匹配其中一个,那么你将不得不用反斜杠\[\]
<?php
$html = '[MENTION=1]one[/MENTION][MENTION=4]two[/MENTION][MENTION=748]three[/MENTION] HI, it is me!!';
preg_match_all('/\[MENTION=(\d+)\](\w+)\[\/MENTION\]/s', $html, $matches);
print_r($matches);
Array ( [0] => Array ( [0] => [MENTION=1]one[/MENTION] [1] => [MENTION=4]two[/MENTION] [2] => [MENTION=748]three[/MENTION] ) [1] => Array ( [0] => 1 [1] => 4 [2] => 748 ) [2] => Array ( [0] => one [1] => two [2] => three ) )