在phpBB论坛上,memberlist.php列出了以下HTML的所有董事会成员:
<a href="profile.php?mode=viewprofile&u=4">Username</a>
其中u = 4是用户的UserID,而Username显然是他们的用户名。
这样的HTML大概有50-100个,我想将它们全部匹配,所以我打算使用preg_match_all
。
这就是我得到的:
preg_match_all('/<a href="profile\.php?mode=viewprofile&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
部分将发生变化:)
干杯。
答案 0 :(得分:2)
您应该使用\d
代替/d
/ d尝试使用修饰符(例如/ i用于不区分大小写)
\ d是一个字符类,表示数字0-9。
这应该有效:
preg_match_all('/<a href="profile\.php\?mode=viewprofile&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&u=\d+">(.*?)</a>%', $page, $usrname, PREG_PATTERN_ORDER);
使用\d+
代替/d
(这是语法错误)。 +
允许多个数字(我猜你会有超过10个用户,不是吗?)?也转义?
,或者它意味着“前一个字符/表达式出现零次或一次。由于你的正则表达式中有一个斜杠,你不能将它用作分隔符,所以我使用了百分号{ {1}}而不是。