使用正则表达式匹配成员列表中的用户名

时间:2010-01-01 20:50:44

标签: regex phpbb preg-match-all

在phpBB论坛上,memberlist.php列出了以下HTML的所有董事会成员:

<a href="profile.php?mode=viewprofile&amp;u=4">Username</a>

其中u = 4是用户的UserID,而Username显然是他们的用户名。

这样的HTML大概有50-100个,我想将它们全部匹配,所以我打算使用preg_match_all

这就是我得到的:

preg_match_all('/<a href="profile\.php?mode=viewprofile&amp;u=/d">(.*?)</a>/', $page, $usrname, PREG_PATTERN_ORDER);

但它会返回此错误:

Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'd' in C:\xampp\htdocs\index.php on line 38

有人能告诉我在preg_match_all函数中使用正则表达式来匹配用户名吗?请记住,链接的u=4部分将发生变化:)

干杯。

4 个答案:

答案 0 :(得分:2)

您应该使用\d代替/d

/ d尝试使用修饰符(例如/ i用于不区分大小写)

\ d是一个字符类,表示数字0-9。

这应该有效:

preg_match_all('/<a href="profile\.php\?mode=viewprofile&amp;u=\d+">(.*?)<\/a>/', $page, $usrname, PREG_PATTERN_ORDER);

答案 1 :(得分:0)

\ d是您需要的而不是/ d

答案 2 :(得分:0)

\ d而不是/ d,你还想逃避?在查询字符串的开头

答案 3 :(得分:0)

使用

preg_match_all('%<a href="profile\.php\?mode=viewprofile&amp;u=\d+">(.*?)</a>%', $page, $usrname, PREG_PATTERN_ORDER);

使用\d+代替/d(这是语法错误)。 +允许多个数字(我猜你会有超过10个用户,不是吗?)?也转义?,或者它意味着“前一个字符/表达式出现零次或一次。由于你的正则表达式中有一个斜杠,你不能将它用作分隔符,所以我使用了百分号{ {1}}而不是。